fixed use of references $cache_attrs and $repeat in Smarty_Compiler.

php does not allow to pass an assigned by reference to a function. since php-5.1.2
the reference to the lval gets lost when passing an assignment.
This commit is contained in:
messju
2006-01-15 19:29:45 +00:00
parent 5cc740b66f
commit 05ec80e72f
2 changed files with 11 additions and 7 deletions

2
NEWS
View File

@@ -1,3 +1,5 @@
- fix improper use of references in the compiler handling cached
attributes and in compiled code handling block plugins (messju)
- make Smarty::_read_file() work on latest php (messju) - make Smarty::_read_file() work on latest php (messju)
- fixed improper tokenization of certain inline math expressions (boots) - fixed improper tokenization of certain inline math expressions (boots)

View File

@@ -726,17 +726,18 @@ class Smarty_Compiler extends Smarty {
if ($start_tag) { if ($start_tag) {
$output = '<?php ' . $this->_push_cacheable_state('block', $tag_command); $output = '<?php ' . $this->_push_cacheable_state('block', $tag_command);
$attrs = $this->_parse_attrs($tag_args); $attrs = $this->_parse_attrs($tag_args);
$arg_list = $this->_compile_arg_list('block', $tag_command, $attrs, $_cache_attrs=''); $_cache_attrs='';
$arg_list = $this->_compile_arg_list('block', $tag_command, $attrs, $_cache_attrs);
$output .= "$_cache_attrs\$this->_tag_stack[] = array('$tag_command', array(".implode(',', $arg_list).')); '; $output .= "$_cache_attrs\$this->_tag_stack[] = array('$tag_command', array(".implode(',', $arg_list).')); ';
$output .= $this->_compile_plugin_call('block', $tag_command).'($this->_tag_stack[count($this->_tag_stack)-1][1], null, $this, $_block_repeat=true);'; $output .= '$_block_repeat=true;' . $this->_compile_plugin_call('block', $tag_command).'($this->_tag_stack[count($this->_tag_stack)-1][1], null, $this, $_block_repeat);';
$output .= 'while ($_block_repeat) { ob_start(); ?>'; $output .= 'while ($_block_repeat) { ob_start(); ?>';
} else { } else {
$output = '<?php $_block_content = ob_get_contents(); ob_end_clean(); '; $output = '<?php $_block_content = ob_get_contents(); ob_end_clean(); ';
$_out_tag_text = $this->_compile_plugin_call('block', $tag_command).'($this->_tag_stack[count($this->_tag_stack)-1][1], $_block_content, $this, $_block_repeat=false)'; $_out_tag_text = $this->_compile_plugin_call('block', $tag_command).'($this->_tag_stack[count($this->_tag_stack)-1][1], $_block_content, $this, $_block_repeat)';
if ($tag_modifier != '') { if ($tag_modifier != '') {
$this->_parse_modifiers($_out_tag_text, $tag_modifier); $this->_parse_modifiers($_out_tag_text, $tag_modifier);
} }
$output .= 'echo '.$_out_tag_text.'; } '; $output .= '$_block_repeat=false;echo ' . $_out_tag_text . '; } ';
$output .= " array_pop(\$this->_tag_stack); " . $this->_pop_cacheable_state('block', $tag_command) . '?>'; $output .= " array_pop(\$this->_tag_stack); " . $this->_pop_cacheable_state('block', $tag_command) . '?>';
} }
@@ -801,7 +802,8 @@ class Smarty_Compiler extends Smarty {
$_cacheable_state = $this->_push_cacheable_state('function', $tag_command); $_cacheable_state = $this->_push_cacheable_state('function', $tag_command);
$attrs = $this->_parse_attrs($tag_args); $attrs = $this->_parse_attrs($tag_args);
$arg_list = $this->_compile_arg_list('function', $tag_command, $attrs, $_cache_attrs=''); $_cache_attrs = '';
$arg_list = $this->_compile_arg_list('function', $tag_command, $attrs, $_cache_attrs);
$output = $this->_compile_plugin_call('function', $tag_command).'(array('.implode(',', $arg_list)."), \$this)"; $output = $this->_compile_plugin_call('function', $tag_command).'(array('.implode(',', $arg_list)."), \$this)";
if($tag_modifier != '') { if($tag_modifier != '') {
@@ -874,13 +876,13 @@ class Smarty_Compiler extends Smarty {
// block method // block method
if ($start_tag) { if ($start_tag) {
$prefix = "\$this->_tag_stack[] = array('$obj_comp', $args); "; $prefix = "\$this->_tag_stack[] = array('$obj_comp', $args); ";
$prefix .= "\$this->_reg_objects['$object'][0]->$obj_comp(\$this->_tag_stack[count(\$this->_tag_stack)-1][1], null, \$this, \$_block_repeat=true); "; $prefix .= "\$_block_repeat=true; \$this->_reg_objects['$object'][0]->$obj_comp(\$this->_tag_stack[count(\$this->_tag_stack)-1][1], null, \$this, \$_block_repeat); ";
$prefix .= "while (\$_block_repeat) { ob_start();"; $prefix .= "while (\$_block_repeat) { ob_start();";
$return = null; $return = null;
$postfix = ''; $postfix = '';
} else { } else {
$prefix = "\$_obj_block_content = ob_get_contents(); ob_end_clean(); "; $prefix = "\$_obj_block_content = ob_get_contents(); ob_end_clean(); ";
$return = "\$this->_reg_objects['$object'][0]->$obj_comp(\$this->_tag_stack[count(\$this->_tag_stack)-1][1], \$_obj_block_content, \$this, \$_block_repeat=false)"; $return = "\$_block_repeat=false; \$this->_reg_objects['$object'][0]->$obj_comp(\$this->_tag_stack[count(\$this->_tag_stack)-1][1], \$_obj_block_content, \$this, \$_block_repeat)";
$postfix = "} array_pop(\$this->_tag_stack);"; $postfix = "} array_pop(\$this->_tag_stack);";
} }
} else { } else {