Sha256: a1c8c2889372b8111141736afd6187a86fb6eda1c7cd4dce1c5e04b75a7c2435
Contents?: true
Size: 1.58 KB
Versions: 5
Compression:
Stored size: 1.58 KB
Contents
var Node = require("./node"); var Variable = function (name, index, currentFileInfo) { this.name = name; this.index = index; this.currentFileInfo = currentFileInfo || {}; }; Variable.prototype = new Node(); Variable.prototype.type = "Variable"; Variable.prototype.eval = function (context) { var variable, name = this.name; if (name.indexOf('@@') === 0) { name = '@' + new Variable(name.slice(1), this.index, this.currentFileInfo).eval(context).value; } if (this.evaluating) { throw { type: 'Name', message: "Recursive variable definition for " + name, filename: this.currentFileInfo.filename, index: this.index }; } this.evaluating = true; variable = this.find(context.frames, function (frame) { var v = frame.variable(name); if (v) { if (v.important) { var importantScope = context.importantScope[context.importantScope.length - 1]; importantScope.important = v.important; } return v.value.eval(context); } }); if (variable) { this.evaluating = false; return variable; } else { throw { type: 'Name', message: "variable " + name + " is undefined", filename: this.currentFileInfo.filename, index: this.index }; } }; Variable.prototype.find = function (obj, fun) { for (var i = 0, r; i < obj.length; i++) { r = fun.call(obj, obj[i]); if (r) { return r; } } return null; }; module.exports = Variable;
Version data entries
5 entries across 5 versions & 2 rubygems