Files
asciidisco.com/build/node_modules/prepack/lib/evaluators/UpdateExpression.js
2023-08-01 13:49:46 +02:00

98 lines
3.5 KiB
JavaScript

"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