UNPKG

prepack

Version:

Execute a JS bundle, serialize global state and side effects to a snapshot that can be quickly restored.

98 lines (74 loc) 3.64 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = function (ast, strictCode, env, realm) { // ECMA262 12.4 Update Expressions // Let expr be the result of evaluating UnaryExpression. let expr = env.evaluate(ast.argument, strictCode); // Let oldValue be ? ToNumber(? GetValue(expr)). let oldExpr = _singletons.Environment.GetValue(realm, expr); if (oldExpr instanceof _index2.AbstractValue) { if (!_singletons.To.IsToNumberPure(realm, oldExpr)) { let error = new _errors.CompilerDiagnostic("might be a symbol or an object with an unknown valueOf or toString or Symbol.toPrimitive method", ast.argument.loc, "PP0008", "RecoverableError"); if (realm.handleError(error) === "Fail") throw new _errors.FatalError(); } (0, _invariant2.default)(ast.operator === "++" || ast.operator === "--"); // As per BabelNodeUpdateExpression let op = ast.operator === "++" ? "+" : "-"; let newAbstractValue = _index2.AbstractValue.createFromBinaryOp(realm, op, oldExpr, new _index2.NumberValue(realm, 1), ast.loc); _singletons.Properties.PutValue(realm, expr, newAbstractValue); if (ast.prefix) { return newAbstractValue; } else { return oldExpr; } } let oldValue = _singletons.To.ToNumber(realm, oldExpr); if (ast.prefix) { if (ast.operator === "++") { // ECMA262 12.4.6.1 // 3. Let newValue be the result of adding the value 1 to oldValue, using the same rules as for the + operator (see 12.8.5) let newValue = (0, _index.Add)(realm, oldValue, 1); // 4. Perform ? PutValue(expr, newValue). _singletons.Properties.PutValue(realm, expr, newValue); // 5. Return newValue. return newValue; } else if (ast.operator === "--") { // ECMA262 12.4.7.1 // 3. Let newValue be the result of subtracting the value 1 from oldValue, using the same rules as for the - operator (see 12.8.5). let newValue = (0, _index.Add)(realm, oldValue, -1); // 4. Perform ? PutValue(expr, newValue). _singletons.Properties.PutValue(realm, expr, newValue); // 5. Return newValue. return newValue; } (0, _invariant2.default)(false); } else { if (ast.operator === "++") { // ECMA262 12.4.4.1 // 3. Let newValue be the result of adding the value 1 to oldValue, using the same rules as for the + operator (see 12.8.5). let newValue = (0, _index.Add)(realm, oldValue, 1); // 4. Perform ? PutValue(lhs, newValue). _singletons.Properties.PutValue(realm, expr, newValue); // 5. Return oldValue. return _index2.IntegralValue.createFromNumberValue(realm, oldValue); } else if (ast.operator === "--") { // ECMA262 12.4.5.1 // 3. Let newValue be the result of subtracting the value 1 from oldValue, using the same rules as for the - operator (see 12.8.5). let newValue = (0, _index.Add)(realm, oldValue, -1); // 4. Perform ? PutValue(lhs, newValue). _singletons.Properties.PutValue(realm, expr, newValue); // 5. Return oldValue. return _index2.IntegralValue.createFromNumberValue(realm, oldValue); } (0, _invariant2.default)(false); } }; var _errors = require("../errors.js"); var _index = require("../methods/index.js"); var _index2 = require("../values/index.js"); var _singletons = require("../singletons.js"); var _invariant = require("../invariant.js"); var _invariant2 = _interopRequireDefault(_invariant); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } //# sourceMappingURL=UpdateExpression.js.map