From a77a2ec58947f5fc7cb4023db3b8f8298e2f01f2 Mon Sep 17 00:00:00 2001 From: Kevin Chabowski Date: Mon, 28 Oct 2013 18:09:50 +0100 Subject: ste:foreach now has an else clause for empty arrays. --- ste.php | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) (limited to 'ste.php') diff --git a/ste.php b/ste.php index 3715435..018d754 100644 --- a/ste.php +++ b/ste.php @@ -887,14 +887,29 @@ $ste_builtins = array( $loopbody .= "\$${loopname}_counter++;\n\$ste->set_var_by_name(\$${loopname}_countervar, \$${loopname}_counter);\n"; } + $loop = array(); + $else = array(); + foreach($ast->sub as $node) { + if(($node instanceof TagNode) && ($node->name == "else")) { + $else = array_merge($else, $node->sub); + } else { + $loop[] = $node; + } + } + $loopbody .= "\$ste->set_var_by_name(\$${loopname}_valuevar, \$${loopname}_value);\n"; if(!empty($ast->params["key"])) { $loopbody .= "\$ste->set_var_by_name(\$${loopname}_keyvar, \$${loopname}_key);\n"; } $loopbody .= "\n"; - $loopbody .= _transcompile($ast->sub); + $loopbody .= _transcompile($loop); $loopbody = "{\n" . loopbody(indent_code($loopbody)) . "\n}\n"; + if(!empty($else)) { + $code .= "if(empty(\$${loopname}_array))\n{\n"; + $code .= indent_code(_transcompile($else)); + $code .= "\n}\nelse "; + } $code .= "foreach(\$${loopname}_array as \$${loopname}_key => \$${loopname}_value)\n$loopbody\n"; return $code; @@ -1351,13 +1366,15 @@ class STECore { } private function &_get_var_reference(&$from, $name, $create_if_not_exist) { + $nullref = NULL; + $bracket_open = strpos($name, "["); if($bracket_open === false) { if(isset($from[$name]) or $create_if_not_exist) { $ref = &$from[$name]; return $ref; } else { - return NULL; + return $nullref; } } else { $old_varname = $varname; @@ -1371,7 +1388,7 @@ class STECore { if($create_if_not_exist) { $from[$varname] = array(); } else { - return NULL; + return $nullref; } } try { -- cgit v1.2.3-70-g09d2