control-freak-ide/server/nodejs/util/docscripts/lib/parser2/JavaScriptVariable.php
plastic-hub-dev-node-saturn 538369cff7 latest
2021-05-12 18:35:18 +02:00

63 lines
1.5 KiB
PHP

<?php
require_once('Destructable.php');
class JavaScriptVariable extends Destructable {
protected $variable;
protected $resolved_variables;
protected $global_scope;
public function __construct($variable, $instantiated = FALSE) {
$this->variable = $variable;
}
public function __destruct() {
$this->mem_flush('variable', 'resolved_variables', 'global_scope');
}
private function resolve() {
if (!$this->variable->is_lookup()) {
$this->global_scope = FALSE;
$this->resolved_variables = array();
}
else {
foreach ($this->variable->resolve(TRUE) as $resolved) {
list($global_scope, $variable) = $resolved;
if ($global_scope) {
$this->global_scope = TRUE;
}
$this->resolved_variables[] = $variable;
}
}
}
public function value() {
if (!isset($this->resolved_variables)) {
$this->resolve();
}
return count($this->resolved_variables) ? $this->resolved_variables[0] : NULL;
}
public function values() {
if (!isset($this->resolved_variables)) {
$this->resolve();
}
return is_array($this->resolved_variables) ? $this->resolved_variables : array();
}
public function type() {
// TODO: Things that receive this value should reassign to aliases as appropriate
return 'variable';
}
public function is_global () {
if (!isset($this->global_scope)) {
$this->resolve();
}
return !!$this->global_scope;
}
public function __toString() {
return '(' . $this->type() . ')';
}
}