/** * @covers ::__construct * @covers ::getVariables * @covers ::getReturnType * @covers ::getGraph */ public function testBasic() { $vertex = new Function_([$a = new Variable()], $t = new Type(Type::TYPE_LONG), $g = new DirectedAdjacencyList()); $this->assertSame([$a], $vertex->getVariables()); $this->assertSame($t, $vertex->getReturnType()); $this->assertSame($g, $vertex->getGraph()); }
public function generateFunction($name, Vertex\Function_ $func) { $state = (object) ['scope' => new \SplObjectStorage(), 'labels' => new \SplObjectStorage(), 'varidx' => 0, 'labelidx' => 0, 'seen' => new \SplObjectStorage(), 'graph' => $func->getGraph(), 'constants' => []]; $body = $this->generate($func, $state); $replace = ""; if ($state->constants) { $replace = implode("\n", $state->constants) . "\n"; } $body = str_replace("--constants--\n", $replace, $body); return 'function ' . $name . ' ' . $func->getReturnType() . "\n" . $body . "end"; }
public function parseFunction(AstFunction $ast) { $args = array(); foreach ($ast->params as $param) { $args[$param->name] = new JitVariable($param->jitType); } $func = new JitFunction($args, $ast->jitType, new DirectedAdjacencyList()); $state = new State($this, $func->getGraph()); $state->scope = $args; $state->last = $func; $this->parseStmtList($ast->stmts, $state); $this->addEndNode($state); return $func; }
public function generateFunction($name, Vertex\Function_ $func) { $state = (object) ['scope' => new \SplObjectStorage(), 'labels' => new \SplObjectStorage(), 'varidx' => 0, 'labelidx' => 0, 'seen' => new \SplObjectStorage(), 'graph' => $func->getGraph()]; return 'function ' . $name . ' ' . $func->getReturnType() . "\n" . $this->generate($func, $state) . "end"; }
public function __construct(JitFunction $func) { $this->function = $func; $this->graph = $func->getGraph(); }