This commit is contained in:
Dave M. 2021-03-01 16:37:19 +00:00
commit f143b082ae
2 changed files with 9 additions and 15 deletions

View File

@ -20,23 +20,18 @@ class ForToken implements ControlStructure {
return "<?php for ($arguments): {$uid} = 1; ?>";
case "endfor":
if ( $context->iterationStack === null ){
$last = end($context->iterationStack);
}
if ( end($context->iterationStack)['or'] === false ) {
if ( $last['or'] === false ) {
$output = "<?php endfor; ?>";
}
else {
$output = "<?php endif; ?>";
$output = "<?php endif; unset({$last['uid']}) ?>";
}
array_pop($context->iterationStack);
return $output;
case "continue":
return "<?php continue; ?>";
}
}
}

View File

@ -4,13 +4,10 @@ namespace Picea\ControlStructure;
class ForeachToken implements ControlStructure {
public array $token = [ "foreach", "endforeach", "continue" ];
public array $token = [ "foreach", "endforeach" ];
public function parse(/*\Picae\Compiler\Context*/ &$context, ?string $arguments, string $token) {
switch($token) {
case "continue":
return "<?php continue; ?>";
case "foreach":
$name = "$".uniqid("foreach_");
@ -30,14 +27,16 @@ class ForeachToken implements ControlStructure {
'token' => 'endforeach',
];
return "<?php foreach ($arguments): $name = ( $name ?? 0 ) + 1; ?>";
return "<?php foreach ($arguments): $name = ( $name ?? 0 ) + 1; ; ?>";
case "endforeach":
if ( end($context->iterationStack)['or'] === false ) {
$last = end($context->iterationStack);
if ( $last['or'] === false ) {
$output = "<?php endforeach; ?>";
}
else {
$output = "<?php endif; ?>";
$output = "<?php endif; unset({$last['uid']}) ?>";
}
array_pop($context->iterationStack);