/** * {var ...} * {default ...} */ public function macroVar(MacroNode $node, PhpWriter $writer) { $out = ''; $var = TRUE; $tokenizer = $writer->preprocess(); while ($token = $tokenizer->fetchToken()) { if ($var && ($token['type'] === MacroTokenizer::T_SYMBOL || $token['type'] === MacroTokenizer::T_VARIABLE)) { if ($node->name === 'default') { $out .= "'" . ltrim($token['value'], "\$") . "'"; } else { $out .= '$' . ltrim($token['value'], "\$"); } $var = NULL; } elseif (($token['value'] === '=' || $token['value'] === '=>') && $token['depth'] === 0) { $out .= $node->name === 'default' ? '=>' : '='; $var = FALSE; } elseif ($token['value'] === ',' && $token['depth'] === 0) { $out .= $node->name === 'default' ? ',' : ';'; $var = TRUE; } elseif ($var === NULL && $node->name === 'default' && $token['type'] !== MacroTokenizer::T_WHITESPACE) { throw new CompileException("Unexpected '{$token['value']}' in {default {$node->args}}"); } else { $out .= $writer->canQuote($tokenizer) ? "'{$token['value']}'" : $token['value']; } } return $node->name === 'default' ? "extract(array({$out}), EXTR_SKIP)" : $out; }