Reduce to a single literal

This commit is contained in:
Tim Schaub
2013-06-10 10:05:10 -06:00
parent 20b66fc447
commit 052b973b39
3 changed files with 117 additions and 171 deletions

View File

@@ -1,10 +1,7 @@
goog.provide('ol.expression.BooleanLiteral');
goog.provide('ol.expression.Expression');
goog.provide('ol.expression.Identifier');
goog.provide('ol.expression.Literal');
goog.provide('ol.expression.Not');
goog.provide('ol.expression.NullLiteral');
goog.provide('ol.expression.NumericLiteral');
goog.provide('ol.expression.StringLiteral');
/**
@@ -28,40 +25,12 @@ ol.expression.Expression = function() {};
*
* @param {Object} scope Evaluation scope. All properties of this object
* will be available as variables when evaluating the expression.
* @return {string|number|boolean|null} Result of the expression.
* @return {*} Result of the expression.
*/
ol.expression.Expression.prototype.evaluate = goog.abstractMethod;
/**
* A boolean literal expression (e.g. `true`).
*
* @constructor
* @extends {ol.expression.Expression}
* @param {boolean} value A boolean value.
*/
ol.expression.BooleanLiteral = function(value) {
/**
* @type {boolean}
* @private
*/
this.value_ = value;
};
goog.inherits(ol.expression.BooleanLiteral, ol.expression.Expression);
/**
* @inheritDoc
*/
ol.expression.BooleanLiteral.prototype.evaluate = function(scope) {
return this.value_;
};
/**
* An identifier expression (e.g. `foo`).
*
@@ -90,6 +59,34 @@ ol.expression.Identifier.prototype.evaluate = function(scope) {
/**
* A literal expression (e.g. `"chicken"`, `42`, `true`, `null`).
*
* @constructor
* @extends {ol.expression.Expression}
* @param {string|number|boolean|null} value A literal value.
*/
ol.expression.Literal = function(value) {
/**
* @type {string|number|boolean|null}
* @private
*/
this.value_ = value;
};
goog.inherits(ol.expression.Literal, ol.expression.Expression);
/**
* @inheritDoc
*/
ol.expression.Literal.prototype.evaluate = function(scope) {
return this.value_;
};
/**
* A logical not expression (e.g. `!foo`).
*
@@ -116,78 +113,3 @@ ol.expression.Not.prototype.evaluate = function(scope) {
return !this.expr_.evaluate(scope);
};
/**
* A numeric literal expression (e.g. `42`).
*
* @constructor
* @extends {ol.expression.Expression}
* @param {number} value A numeric value.
*/
ol.expression.NumericLiteral = function(value) {
/**
* @type {number}
* @private
*/
this.value_ = value;
};
goog.inherits(ol.expression.NumericLiteral, ol.expression.Expression);
/**
* @inheritDoc
*/
ol.expression.NumericLiteral.prototype.evaluate = function(scope) {
return this.value_;
};
/**
* A null literal expression (i.e. `null`).
*
* @constructor
* @extends {ol.expression.Expression}
*/
ol.expression.NullLiteral = function() {
};
goog.inherits(ol.expression.NullLiteral, ol.expression.Expression);
/**
* @inheritDoc
*/
ol.expression.NullLiteral.prototype.evaluate = function(scope) {
return null;
};
/**
* A string literal expression (e.g. `"chicken"`).
*
* @constructor
* @extends {ol.expression.Expression}
* @param {string} value A string.
*/
ol.expression.StringLiteral = function(value) {
/**
* @type {string}
* @private
*/
this.value_ = value;
};
goog.inherits(ol.expression.StringLiteral, ol.expression.Expression);
/**
* @inheritDoc
*/
ol.expression.StringLiteral.prototype.evaluate = function(scope) {
return this.value_;
};

View File

@@ -2,14 +2,11 @@ goog.provide('ol.expression.Parser');
goog.require('goog.asserts');
goog.require('ol.expression.BooleanLiteral');
goog.require('ol.expression.Expression');
goog.require('ol.expression.Identifier');
goog.require('ol.expression.Lexer');
goog.require('ol.expression.Literal');
goog.require('ol.expression.Not');
goog.require('ol.expression.NullLiteral');
goog.require('ol.expression.NumericLiteral');
goog.require('ol.expression.StringLiteral');
goog.require('ol.expression.Token');
goog.require('ol.expression.TokenType');
@@ -159,24 +156,11 @@ ol.expression.Parser.prototype.createIdentifier_ = function(name) {
* Create a literal expression.
*
* @param {string|number|boolean|null} value Literal value.
* @return {ol.expression.StringLiteral|ol.expression.NumericLiteral|
* ol.expression.BooleanLiteral|ol.expression.NullLiteral} The
* expression.
* @return {ol.expression.Literal} The literal expression.
* @private
*/
ol.expression.Parser.prototype.createLiteral_ = function(value) {
var expr;
if (goog.isString(value)) {
expr = new ol.expression.StringLiteral(value);
} else if (goog.isNumber(value)) {
expr = new ol.expression.NumericLiteral(value);
} else if (goog.isBoolean(value)) {
expr = new ol.expression.BooleanLiteral(value);
} else {
goog.asserts.assert(goog.isNull(value));
expr = new ol.expression.NullLiteral();
}
return expr;
return new ol.expression.Literal(value);
};