/** * Get C++ code for function * * @return string C++ code */ public function getCode() { $this->variablesFromCode(); $this->codeGenerator->getScope()->debug(); $variables = ''; foreach ($this->vars as $var) { $var->setVariable($this->codeGenerator->getScope()['$' . $var->getName()]); $variables .= $var->getCode(); } return 'Php::Value phpFunc_' . $this->getName() . '(Php::Parameters &args)' . "\n" . '{' . "\n" . '' . $variables . "\n" . '' . $this->codeGenerator->getCode() . "\n" . ' return nullptr;' . "\n" . '}' . "\n\n"; }
/** * if(<expr>) [{] <code> [}] [elseif(<expr>) { <code> }]+ [else { <code> }] * * @param $codeGenerator */ public function parse_if(CodeGenerator $codeGenerator) { // 'if' eaten $prec = new Precedence($this->scanner); $prec->run(); // If $token = $this->scanner->next(); $bodyCode = new CodeGenerator($codeGenerator->getIndent() + 1, $codeGenerator->getScope()); if ($token['code'] == T_LCURLY_PARENTHESIS) { $this->parse_body($bodyCode); $this->check(T_RCURLY_PARENTHESIS); } else { $this->scanner->back(); $this->parser_command($bodyCode); } $codeGenerator->addIf(new ExprGenerator($prec->getData(), $codeGenerator->getScope()), $bodyCode); //$codeGenerator->addVariables($prec->getUsedVariables()); // Elseif $token = $this->scanner->next(); while ($token['code'] == T_ELSEIF) { $prec = new Precedence($this->scanner); $prec->run(); $token = $this->scanner->next(); $bodyCode = new CodeGenerator($codeGenerator->getIndent() + 1, $codeGenerator->getScope()); if ($token['code'] == T_LCURLY_PARENTHESIS) { $this->parse_body($bodyCode); $this->check(T_RCURLY_PARENTHESIS); } else { $this->scanner->back(); $this->parser_command($bodyCode); } //$codeGenerator->addVariables($prec->getUsedVariables()); $codeGenerator->addElseif(new ExprGenerator($prec->getData(), $codeGenerator->getScope()), $bodyCode); $token = $this->scanner->next(); } // else if ($token['code'] == T_ELSE) { $token = $this->scanner->next(); $bodyCode = new CodeGenerator($codeGenerator->getIndent() + 1, $codeGenerator->getScope()); if ($token['code'] == T_LCURLY_PARENTHESIS) { $this->parse_body($bodyCode); $this->check(T_RCURLY_PARENTHESIS); } else { $this->scanner->back(); $this->parser_command($bodyCode); } //$codeGenerator->addVariables($prec->getUsedVariables()); $codeGenerator->addElse($bodyCode); } else { $this->scanner->back(); } }