add pretzel maps
This commit is contained in:
parent
9e204a7fee
commit
2ec2a4b5af
19
acorn.js
19
acorn.js
@ -2615,11 +2615,30 @@
|
||||
case _lt:
|
||||
return parseXJSElement();
|
||||
|
||||
case _colon:
|
||||
return parsePretzelMap();
|
||||
|
||||
default:
|
||||
unexpected();
|
||||
}
|
||||
}
|
||||
|
||||
function parsePretzelMap() {
|
||||
var node = startNode();
|
||||
next();
|
||||
|
||||
var start = storeCurrentPos();
|
||||
node.callee = parseSubscripts(parseExprAtom(), start, true);
|
||||
|
||||
if (eat(_parenL)) {
|
||||
node.arguments = parseExprList(_parenR, false);
|
||||
} else {
|
||||
node.arguments = [];
|
||||
}
|
||||
|
||||
return finishNode(node, "PretzelMapExpression");
|
||||
}
|
||||
|
||||
// New's precedence is slightly tricky. It must allow its argument
|
||||
// to be a `[]` or dot subscript expression, but not a call — at
|
||||
// least, not without wrapping it in parentheses. Thus, it uses the
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
"name": "acorn-6to5",
|
||||
"description": "Acorn fork used by 6to5",
|
||||
"main": "acorn.js",
|
||||
"version": "0.9.1-8",
|
||||
"version": "0.9.1-9",
|
||||
"maintainers": [
|
||||
{
|
||||
"name": "Marijn Haverbeke",
|
||||
|
||||
@ -4,6 +4,110 @@ if (typeof exports != "undefined") {
|
||||
var testAssert = require("./driver.js").testAssert;
|
||||
}
|
||||
|
||||
// Pretzel map
|
||||
|
||||
test("arr.map(:toUpperCase)", {
|
||||
type: "Program",
|
||||
start: 0,
|
||||
end: 21,
|
||||
body: [{
|
||||
type: "ExpressionStatement",
|
||||
start: 0,
|
||||
end: 21,
|
||||
expression: {
|
||||
type: "CallExpression",
|
||||
start: 0,
|
||||
end: 21,
|
||||
callee: {
|
||||
type: "MemberExpression",
|
||||
start: 0,
|
||||
end: 7,
|
||||
object: {
|
||||
type: "Identifier",
|
||||
start: 0,
|
||||
end: 3,
|
||||
name: "arr"
|
||||
},
|
||||
property: {
|
||||
type: "Identifier",
|
||||
start: 4,
|
||||
end: 7,
|
||||
name: "map"
|
||||
},
|
||||
computed: false
|
||||
},
|
||||
arguments: [{
|
||||
type: "PretzelMapExpression",
|
||||
start: 8,
|
||||
end: 20,
|
||||
callee: {
|
||||
type: "Identifier",
|
||||
start: 9,
|
||||
end: 20,
|
||||
name: "toUpperCase"
|
||||
},
|
||||
arguments: []
|
||||
}]
|
||||
}
|
||||
}]
|
||||
}, {
|
||||
playground: true
|
||||
});
|
||||
|
||||
test("arr.map(:toFixed(2))", {
|
||||
type: "Program",
|
||||
start: 0,
|
||||
end: 20,
|
||||
body: [{
|
||||
type: "ExpressionStatement",
|
||||
start: 0,
|
||||
end: 20,
|
||||
expression: {
|
||||
type: "CallExpression",
|
||||
start: 0,
|
||||
end: 20,
|
||||
callee: {
|
||||
type: "MemberExpression",
|
||||
start: 0,
|
||||
end: 7,
|
||||
object: {
|
||||
type: "Identifier",
|
||||
start: 0,
|
||||
end: 3,
|
||||
name: "arr"
|
||||
},
|
||||
property: {
|
||||
type: "Identifier",
|
||||
start: 4,
|
||||
end: 7,
|
||||
name: "map"
|
||||
},
|
||||
computed: false
|
||||
},
|
||||
arguments: [{
|
||||
type: "PretzelMapExpression",
|
||||
start: 8,
|
||||
end: 19,
|
||||
callee: {
|
||||
type: "Identifier",
|
||||
start: 9,
|
||||
end: 16,
|
||||
name: "toFixed"
|
||||
},
|
||||
arguments: [{
|
||||
type: "Literal",
|
||||
start: 17,
|
||||
end: 18,
|
||||
value: 2,
|
||||
raw: "2"
|
||||
}]
|
||||
}]
|
||||
}
|
||||
}]
|
||||
}, {
|
||||
playground: true
|
||||
});
|
||||
|
||||
// Memoization assignment operator
|
||||
|
||||
testFail("obj ?= 2;", "You can only use member expressions in memoization assignment (1:0)");
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user