support #__PURE__ in ESTree (#4879)

This commit is contained in:
Alex Lam S.L
2021-04-28 21:13:42 +01:00
committed by GitHub
parent a06e20304b
commit d576495e5a
7 changed files with 88 additions and 19 deletions

View File

@@ -446,8 +446,22 @@
args.value = val;
return new AST_String(args);
case "number":
args.value = val;
return new AST_Number(args);
if (isNaN(val)) return new AST_NaN(args);
var negate, node;
if (isFinite(val)) {
negate = 1 / val < 0;
args.value = negate ? -val : val;
node = new AST_Number(args);
} else {
negate = val < 0;
node = new AST_Infinity(args);
}
return negate ? new AST_UnaryPrefix({
start: args.start,
end: args.end,
operator: "-",
expression: node,
}) : node;
case "boolean":
return new (val ? AST_True : AST_False)(args);
}
@@ -532,6 +546,14 @@
name: "this",
});
},
ParenthesizedExpression: function(M) {
var node = from_moz(M.expression);
if (!node.start.parens) node.start.parens = [];
node.start.parens.push(my_start_token(M));
if (!node.end.parens) node.end.parens = [];
node.end.parens.push(my_end_token(M));
return node;
},
};
MOZ_TO_ME.UpdateExpression =
@@ -570,8 +592,8 @@
map("AssignmentExpression", AST_Assign, "operator=operator, left>left, right>right");
map("AssignmentPattern", AST_DefaultValue, "left>name, right>value");
map("ConditionalExpression", AST_Conditional, "test>condition, consequent>consequent, alternate>alternative");
map("NewExpression", AST_New, "callee>expression, arguments@args");
map("CallExpression", AST_Call, "callee>expression, arguments@args");
map("NewExpression", AST_New, "callee>expression, arguments@args, pure=pure");
map("CallExpression", AST_Call, "callee>expression, arguments@args, pure=pure");
map("SequenceExpression", AST_Sequence, "expressions@expressions");
map("SpreadElement", AST_Spread, "argument>expression");
map("ObjectExpression", AST_Object, "properties@properties");