evaluate null

fixes #633
This commit is contained in:
Tobias Koppers 2014-12-22 09:32:42 +01:00
parent cc930801b5
commit 4fef1312c5
3 changed files with 17 additions and 0 deletions

View File

@ -7,6 +7,9 @@ function BasicEvaluatedExpression() {
}
module.exports = BasicEvaluatedExpression;
BasicEvaluatedExpression.prototype.isNull = function() {
return !!this.null;
};
BasicEvaluatedExpression.prototype.isString = function() {
return Object.prototype.hasOwnProperty.call(this, "string");
};
@ -36,6 +39,7 @@ BasicEvaluatedExpression.prototype.isWrapped = function() {
};
BasicEvaluatedExpression.prototype.asBool = function() {
if(this.isBoolean()) return this.bool;
else if(this.isNull()) return false;
else if(this.isString()) return !!this.string;
else if(this.isNumber()) return !!this.number;
else if(this.isRegExp()) return true;
@ -48,6 +52,7 @@ BasicEvaluatedExpression.prototype.set = function(value) {
if(typeof value === "string") return this.setString(value);
if(typeof value === "number") return this.setNumber(value);
if(typeof value === "boolean") return this.setBoolean(value);
if(value === null) return this.setNull();
if(value instanceof RegExp) return this.setRegExp(value);
if(Array.isArray(value)) return this.setArray(value);
return this;
@ -59,6 +64,10 @@ BasicEvaluatedExpression.prototype.setString = function(str) {
this.string = str;
return this;
};
BasicEvaluatedExpression.prototype.setNull = function(str) {
this.null = true;
return this;
};
BasicEvaluatedExpression.prototype.setNumber = function(num) {
if(num === null)
delete this.number;

View File

@ -33,6 +33,8 @@ Parser.prototype.initializeEvaluating = function() {
case "boolean":
return new BasicEvaluatedExpression().setBoolean(expr.value).setRange(expr.range);
}
if(expr.value === null)
return new BasicEvaluatedExpression().setNull().setRange(expr.range);
if(expr.value instanceof RegExp)
return new BasicEvaluatedExpression().setRegExp(expr.value).setRange(expr.range);
});

View File

@ -5,6 +5,12 @@ it("should define DEBUG", function() {
var y = DEBUG ? require("fail") : require("./a");
});
it("should evaluate null", function() {
var y = null ? require("fail") : require("./a");
if(null)
require("fail");
});
it("should short-circut evaluating", function() {
var expr;
var a = DEBUG && expr ? require("fail") : require("./a");