public function traverse(Script $script) { $this->event('enterScript', [$script]); $this->traverseFunc($script->main); foreach ($script->functions as $func) { $this->traverseFunc($func); } $this->event('leaveScript', [$script]); }
private function load() { $traverser = new Traverser(); $declarations = new Visitor\DeclarationFinder(); $calls = new Visitor\CallFinder(); $variables = new Visitor\VariableFinder(); $traverser->addVisitor($declarations); $traverser->addVisitor($calls); $traverser->addVisitor($variables); for ($i = 0; $i < count($this->blocks); $i++) { $this->blocks[$i] = $traverser->traverse($this->blocks[$i]); } $this->variables = $variables->getVariables(); $this->constants = $declarations->getConstants(); $this->traits = $declarations->getTraits(); $this->classes = $declarations->getClasses(); $this->interfaces = $declarations->getInterfaces(); $this->methods = $declarations->getMethods(); $this->functions = $declarations->getFunctions(); $this->functionLookup = $this->buildFunctionLookup($declarations->getFunctions()); $this->callFinder = $calls; $this->methodCalls = $this->findMethodCalls(); $this->newCalls = $this->findNewCalls(); $this->computeTypeMatrix(); }