All Downloads are FREE. Search and download functionalities are using the official Maven repository.

js.prompto.javascript.JavaScriptIdentifierExpression.js Maven / Gradle / Ivy

var JavaScriptExpression = require("./JavaScriptExpression").JavaScriptExpression;
var PromptoError = require("../error/PromptoError").PromptoError;

function JavaScriptIdentifierExpression(id) {
	JavaScriptExpression.call(this);
	this.id = id;
	return this;
}

JavaScriptIdentifierExpression.prototype = Object.create(JavaScriptExpression.prototype);
JavaScriptIdentifierExpression.prototype.constructor = JavaScriptIdentifierExpression;

JavaScriptIdentifierExpression.prototype.toString = function() {
	if(this.parent==null) {
		return this.id.name;
	} else {
		return this.parent.toString() + '.' + this.id.name;
	}
};

JavaScriptIdentifierExpression.prototype.toDialect = function(writer) {
    if(this.parent!=null) {
        this.parent.toDialect(writer);
        writer.append('.');
    }
    writer.append(this.id.name);
};


JavaScriptIdentifierExpression.prototype.interpret = function(context, module) {
    var o = this.interpret_prompto(context);
    if(o!=null) {
        return o;
    }
	o = this.interpret_instance(context);
	if(o!=null) {
		return o;
	}
	o = this.interpret_module(module); // as a module import
	if(o!=null) {
		return o;
	}
	o = this.interpret_global(); // as a global declaration
	if(o!=null) {
		return o;
	}
	return null;
};

JavaScriptIdentifierExpression.prototype.interpret_prompto = function(context) {
    if ("$context" == this.id.name)
        return context;
    else
        return null;
};

JavaScriptIdentifierExpression.prototype.interpret_instance = function(context) {
	if(context==null) {
		return null;
	} else {
		try {
			return context.getValue(this.id);
		} catch (e) {
			if (e instanceof PromptoError) {
				return null;
			} else {
				throw e;
			}
		}
	}
};

JavaScriptIdentifierExpression.prototype.interpret_module = function(module) {
	if(module==null) {
		return null;
	} else {
		try {
			m = module.resolve();
			o = m[this.id.name]
			if(o) {
				return o;
			} else {
				return m;
			}
		} catch (e) {
			throw new SyntaxError("Could not resolve module: " + module.toString());
		}
	}
};


JavaScriptIdentifierExpression.prototype.interpret_global = function() {
	try {
		return eval(this.id.name);
	} catch (e) {
		return null;
	}
};

exports.JavaScriptIdentifierExpression = JavaScriptIdentifierExpression;




© 2015 - 2025 Weber Informatics LLC | Privacy Policy