Add exponentiation operator
This commit is contained in:
committed by
Richard van Velzen
parent
2246c79318
commit
6eaeb19a4a
@@ -1088,6 +1088,7 @@ merge(Compressor.prototype, {
|
||||
case "^" : return ev(left, c) ^ ev(right, c);
|
||||
case "+" : return ev(left, c) + ev(right, c);
|
||||
case "*" : return ev(left, c) * ev(right, c);
|
||||
case "**" : return Math.pow(ev(left, c), ev(right, c));
|
||||
case "/" : return ev(left, c) / ev(right, c);
|
||||
case "%" : return ev(left, c) % ev(right, c);
|
||||
case "-" : return ev(left, c) - ev(right, c);
|
||||
|
||||
@@ -538,7 +538,13 @@ function OutputStream(options) {
|
||||
PARENS([ AST_Unary, AST_Undefined ], function(output){
|
||||
var p = output.parent();
|
||||
return p instanceof AST_PropAccess && p.expression === this
|
||||
|| p instanceof AST_New;
|
||||
|| p instanceof AST_New
|
||||
|| p instanceof AST_Binary
|
||||
&& p.operator === "**"
|
||||
&& this instanceof AST_UnaryPrefix
|
||||
&& p.left === this
|
||||
&& this.operator !== "++"
|
||||
&& this.operator !== "--";
|
||||
});
|
||||
|
||||
PARENS(AST_Seq, function(output){
|
||||
|
||||
13
lib/parse.js
13
lib/parse.js
@@ -80,6 +80,7 @@ var OPERATORS = makePredicate([
|
||||
"|",
|
||||
"^",
|
||||
"*",
|
||||
"**",
|
||||
"/",
|
||||
"%",
|
||||
">>",
|
||||
@@ -99,6 +100,7 @@ var OPERATORS = makePredicate([
|
||||
"-=",
|
||||
"/=",
|
||||
"*=",
|
||||
"**=",
|
||||
"%=",
|
||||
">>=",
|
||||
"<<=",
|
||||
@@ -694,7 +696,7 @@ var UNARY_PREFIX = makePredicate([
|
||||
|
||||
var UNARY_POSTFIX = makePredicate([ "--", "++" ]);
|
||||
|
||||
var ASSIGNMENT = makePredicate([ "=", "+=", "-=", "/=", "*=", "%=", ">>=", "<<=", ">>>=", "|=", "^=", "&=" ]);
|
||||
var ASSIGNMENT = makePredicate([ "=", "+=", "-=", "/=", "*=", "**=", "%=", ">>=", "<<=", ">>>=", "|=", "^=", "&=" ]);
|
||||
|
||||
var PRECEDENCE = (function(a, ret){
|
||||
for (var i = 0; i < a.length; ++i) {
|
||||
@@ -715,7 +717,8 @@ var PRECEDENCE = (function(a, ret){
|
||||
["<", ">", "<=", ">=", "in", "instanceof"],
|
||||
[">>", "<<", ">>>"],
|
||||
["+", "-"],
|
||||
["*", "/", "%"]
|
||||
["*", "/", "%"],
|
||||
["**"]
|
||||
],
|
||||
{}
|
||||
);
|
||||
@@ -2015,8 +2018,12 @@ function parse($TEXT, options) {
|
||||
var expr_op = function(left, min_prec, no_in) {
|
||||
var op = is("operator") ? S.token.value : null;
|
||||
if (op == "in" && no_in) op = null;
|
||||
if (op == "**" && left instanceof AST_UnaryPrefix
|
||||
&& left.end === S.prev /* unary token in front not allowed, but allowed if prev is for example `)` */
|
||||
&& left.operator !== "--" && left.operator !== "++")
|
||||
unexpected(left.start);
|
||||
var prec = op != null ? PRECEDENCE[op] : null;
|
||||
if (prec != null && prec > min_prec) {
|
||||
if (prec != null && (prec > min_prec || (op === "**" && min_prec === prec))) {
|
||||
next();
|
||||
var right = expr_op(maybe_unary(true), prec, no_in);
|
||||
return expr_op(new AST_Binary({
|
||||
|
||||
Reference in New Issue
Block a user