mutants-appfx
Version:
appfx module
290 lines (242 loc) • 8.76 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = undefined;
var _assign = require('babel-runtime/core-js/object/assign');
var _assign2 = _interopRequireDefault(_assign);
var _getPrototypeOf = require('babel-runtime/core-js/object/get-prototype-of');
var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf);
var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck');
var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
var _createClass2 = require('babel-runtime/helpers/createClass');
var _createClass3 = _interopRequireDefault(_createClass2);
var _possibleConstructorReturn2 = require('babel-runtime/helpers/possibleConstructorReturn');
var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
var _inherits2 = require('babel-runtime/helpers/inherits');
var _inherits3 = _interopRequireDefault(_inherits2);
var _ExprListener2 = require('./ExprListener');
var _ExprException = require('./ExprException');
var _ExprException2 = _interopRequireDefault(_ExprException);
var _DateUtil = require('./DateUtil');
var _DateUtil2 = _interopRequireDefault(_DateUtil);
var _AggregatesUtil = require('./AggregatesUtil');
var AggregatesUtil = _interopRequireWildcard(_AggregatesUtil);
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var ExprExecutor = function (_ExprListener) {
(0, _inherits3.default)(ExprExecutor, _ExprListener);
function ExprExecutor(scope) {
(0, _classCallCheck3.default)(this, ExprExecutor);
var _this = (0, _possibleConstructorReturn3.default)(this, (ExprExecutor.__proto__ || (0, _getPrototypeOf2.default)(ExprExecutor)).call(this));
_this.scope = scope || {};
return _this;
}
(0, _createClass3.default)(ExprExecutor, [{
key: 'exitExec',
value: function exitExec(ctx) {
this.result = ctx.getChild(0).value;
}
// singleExpression ( ',' singleExpression )*
}, {
key: 'exitExpressionSequence',
value: function exitExpressionSequence(ctx) {
var value = [ctx.getChild(0).value];
for (var i = 2, l = ctx.getChildCount(); i < l; i += 2) {
value.push(ctx.getChild(i).value);
}
ctx.value = value;
}
// '=' CONST*
}, {
key: 'exitConstStringExpression',
value: function exitConstStringExpression(ctx) {
ctx.value = ctx.getChild(1).getText();
}
// singleExpression '.' ID '(' expressionSequence ')'
}, {
key: 'exitFunctionInvokeExpression',
value: function exitFunctionInvokeExpression(ctx) {
ctx.value = ctx.getChild(0).value[ctx.getChild(2).getText()].apply(ctx.getChild(0).value, ctx.getChild(4).value);
}
// singleExpression '[' expressionSequence ']'
}, {
key: 'exitMemberIndexExpression',
value: function exitMemberIndexExpression(ctx) {
ctx.value = ctx.getChild(2).value.reduce(function (v, index) {
return v[index];
}, ctx.getChild(0).value);
}
// singleExpression '.' ID
}, {
key: 'exitMemberDotExpression',
value: function exitMemberDotExpression(ctx) {
if (!ctx.getChild(0).value) {
return undefined;
}
ctx.value = ctx.getChild(0).value[ctx.getChild(2).getText()];
}
// ( '~' | '!') singleExpression
}, {
key: 'exitUnaryExpression',
value: function exitUnaryExpression(ctx) {
var oper = ctx.getChild(0).getText();
if (oper === '~') {
ctx.value = ~ctx.getChild(1).value;
} else if (oper === '!') {
ctx.value = !ctx.getChild(1).value;
} else {
throw new _ExprException2.default('UnaryExpression operator ' + oper + ' not support');
}
}
/*
'*' | '/' | '%' | '+' | '-'
| '<<' | '>>' | '>>>'
| '<' | '>' | '<=' | '>='
| 'in'
| '==' | '!=' | '===' | '!=='
| '&' | '^' | '|'
| '&&' '||'
*/
}, {
key: 'exitBinaryExpression',
value: function exitBinaryExpression(ctx) {
var a = ctx.getChild(0).value;
var b = ctx.getChild(2).value;
var oper = ctx.getChild(1).getText();
if (oper === 'in') {
ctx.value = a in b;
} else if (oper === '*') {
ctx.value = a * b;
} else if (oper === '/') {
ctx.value = a / b;
} else if (oper === '%') {
ctx.value = a % b;
} else if (oper === '+') {
ctx.value = a + b;
} else if (oper === '-') {
ctx.value = a - b;
} else if (oper === '<<') {
ctx.value = a << b;
} else if (oper === '>>') {
ctx.value = a >> b;
} else if (oper === '>>>') {
ctx.value = a >>> b;
} else if (oper === '<') {
ctx.value = a < b;
} else if (oper === '>') {
ctx.value = a > b;
} else if (oper === '<=') {
ctx.value = a <= b;
} else if (oper === '>=') {
ctx.value = a >= b;
} else if (oper === '==') {
ctx.value = a == b;
} else if (oper === '!=') {
ctx.value = a != b;
} else if (oper === '===') {
ctx.value = a === b;
} else if (oper === '!==') {
ctx.value = a !== b;
} else if (oper === '&') {
ctx.value = a & b;
} else if (oper === '^') {
ctx.value = a ^ b;
} else if (oper === '|') {
ctx.value = a | b;
} else if (oper === '&&') {
ctx.value = a && b;
} else if (oper === '||') {
ctx.value = a || b;
} else {
throw new _ExprException2.default('BinaryExpression operator ' + oper + ' not support');
}
}
// singleExpression '?' singleExpression ':' singleExpression
}, {
key: 'exitTernaryExpression',
value: function exitTernaryExpression(ctx) {
var condition = ctx.getChild(0);
var success = ctx.getChild(2);
var fail = ctx.getChild(4);
if (condition.value) {
ctx.value = success.value;
} else {
ctx.value = fail.value;
}
}
}, {
key: 'exitInternalExpression',
value: function exitInternalExpression(ctx) {
var internalObj = ctx.getText();
if (internalObj === 'now') {
ctx.value = new Date();
} else if (internalObj === 'Date') {
ctx.value = _DateUtil2.default;
} else if (internalObj === 'Math') {
ctx.value = Math;
} else if (internalObj === 'Aggs') {
ctx.value = AggregatesUtil;
} else {
throw new _ExprException2.default('InternalExpression ' + internalObj + ' not support');
}
}
// value
}, {
key: 'exitLiteralExpression',
value: function exitLiteralExpression(ctx) {
// value左右可以有空格
ctx.value = new Function('return ' + ctx.getText().trim())();
}
// VARID
}, {
key: 'exitIdentifierExpression',
value: function exitIdentifierExpression(ctx) {
ctx.value = this.scope[ctx.getText().substr(1)];
}
// '(' expressionSequence ')'
}, {
key: 'exitParenthesizedExpression',
value: function exitParenthesizedExpression(ctx) {
ctx.value = ctx.getChild(1).value;
}
// objectLiteral
}, {
key: 'exitObjectLiteralExpression',
value: function exitObjectLiteralExpression(ctx) {
ctx.value = ctx.getChild(0).value;
}
// '{' (propertyAssignment (',' propertyAssignment)*)? ','? '}'
}, {
key: 'exitObjectPropertyAssignmentExpression',
value: function exitObjectPropertyAssignmentExpression(ctx) {
var ps = [];
for (var i = 1, l = ctx.getChildCount() - 1; i < l; i += 2) {
ps.push(ctx.getChild(i).value);
}
ctx.value = _assign2.default.apply(Object, [{}].concat(ps));
}
// ID (':' |'=') singleExpression
}, {
key: 'exitPropertyExpressionAssignment',
value: function exitPropertyExpressionAssignment(ctx) {
ctx.value = ctx.value || {};
ctx.value[ctx.getChild(0).getText()] = ctx.getChild(2).value;
}
// '[' singleExpression ']' ':' singleExpression
}, {
key: 'exitComputedPropertyExpressionAssignment',
value: function exitComputedPropertyExpressionAssignment(ctx) {
ctx.value = ctx.value || {};
ctx.value[ctx.getChild(1).value] = ctx.getChild(4).value;
}
}, {
key: 'exitConstString',
value: function exitConstString(ctx) {
ctx.value = ctx.getText();
}
}]);
return ExprExecutor;
}(_ExprListener2.ExprListener);
exports.default = ExprExecutor;
//# sourceMappingURL=ExprExecutor.js.map