public function fetchContext($context = self::CONTEXT_OUTSIDE_CLOSURE)
{
$forClosure = " // This is make variables in USE available in the parent level\n if (it.out('USE').out('ARGUMENT').retain([current]).any()) {\n context[it.atom] = 'Global';\n }\n";
if ($context == self::CONTEXT_IN_CLOSURE) {
$forClosure = "";
}
$this->addMethod(<<<GREMLIN
as("context")
.sideEffect{ line = it.get().value('line');
fullcode = it.get().value('fullcode');
file='None';
theFunction = 'None';
theClass='None';
theNamespace='\\\\';
}
.sideEffect{ line = it.get().value('line'); }
.until( hasLabel('File') ).repeat(
__.in({$this->linksDown})
.sideEffect{ if (it.get().label() == 'Function') { theFunction = it.get().value('code')} }
.sideEffect{ if (it.get().label() in ['Class']) { theClass = it.get().value('fullcode')} }
.sideEffect{ if (it.get().label() in ['Namespace']) { theNamespace = it.get().vertices(OUT, 'NAME').next().value('fullcode')} }
)
.sideEffect{ file = it.get().value('fullcode');}
.sideEffect{ context = ['line':line, 'file':file, 'fullcode':fullcode, 'function':theFunction, 'class':theClass, 'namespace':theNamespace]; }
.select("context")
GREMLIN
);
return $this;
}