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

js.prompto.expression.NotExpression.js Maven / Gradle / Ivy

var CodeWriter = require("../utils/CodeWriter").CodeWriter;
var Dialect = require("../parser/Dialect").Dialect;
var Value = require("../value/Value").Value;
var Bool = require("../value/Bool").Bool;

function NotExpression(expression) {
	this.expression = expression;
	return this;
}

NotExpression.prototype.toString = function() {
    return "not " + this.expression.toString();
};

NotExpression.prototype.operatorToDialect = function(dialect) {
    switch(dialect) {
        case Dialect.E:
        case Dialect.M:
            return "not ";
        case Dialect.O:
            return "! ";
        default:
            throw new Exception("Unsupported: " + dialect.name);
    }
};

NotExpression.prototype.toDialect = function(writer) {
    writer.toDialect(this);
    this.expression.toDialect(writer);
};

NotExpression.prototype.toEDialect = function(writer) {
    writer.append("not ");
};

NotExpression.prototype.toMDialect = function(writer) {
    writer.append("not ");
};

NotExpression.prototype.toODialect = function(writer) {
    writer.append("!");
};


NotExpression.prototype.check = function(context) {
	var type = this.expression.check(context);
	return type.checkNot(context);
};

NotExpression.prototype.interpret = function(context) {
	var val = this.expression.interpret(context);
	return val.Not();
};

NotExpression.prototype.interpretAssert = function(context, test) {
    var result = this.interpret(context);
    if(result==Bool.TRUE)
        return true;
    var writer = new CodeWriter(test.dialect, context);
    this.toDialect(writer);
    var expected = writer.toString();
    var actual = this.operatorToDialect(test.dialect) + val.toString();
    test.printFailedAssertion(context, expected, actual);
    return false;
};

exports.NotExpression = NotExpression;




© 2015 - 2025 Weber Informatics LLC | Privacy Policy