first commit
This commit is contained in:
98
build/node_modules/prepack/lib/evaluators/UpdateExpression.js
generated
vendored
Normal file
98
build/node_modules/prepack/lib/evaluators/UpdateExpression.js
generated
vendored
Normal file
@@ -0,0 +1,98 @@
|
||||
"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.
|
||||
var expr = env.evaluate(ast.argument, strictCode);
|
||||
|
||||
// Let oldValue be ? ToNumber(? GetValue(expr)).
|
||||
var oldExpr = _singletons.Environment.GetValue(realm, expr);
|
||||
if (oldExpr instanceof _index2.AbstractValue) {
|
||||
if (!_singletons.To.IsToNumberPure(realm, oldExpr)) {
|
||||
var 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
|
||||
var op = ast.operator === "++" ? "+" : "-";
|
||||
var 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;
|
||||
}
|
||||
}
|
||||
var 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)
|
||||
var 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).
|
||||
var _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).
|
||||
var _newValue2 = (0, _index.Add)(realm, oldValue, 1);
|
||||
|
||||
// 4. Perform ? PutValue(lhs, newValue).
|
||||
_singletons.Properties.PutValue(realm, expr, _newValue2);
|
||||
|
||||
// 5. Return oldValue.
|
||||
return new _index2.NumberValue(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).
|
||||
var _newValue3 = (0, _index.Add)(realm, oldValue, -1);
|
||||
|
||||
// 4. Perform ? PutValue(lhs, newValue).
|
||||
_singletons.Properties.PutValue(realm, expr, _newValue3);
|
||||
|
||||
// 5. Return oldValue.
|
||||
return new _index2.NumberValue(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
|
||||
Reference in New Issue
Block a user