UNPKG

mutants-appfx

Version:

appfx module

290 lines (242 loc) 8.76 kB
'use strict'; 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