Exemple #1
0
 /**
  * {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;
 }