Commit patch for bug 436731 - multiple destructuring forms in function param list

git-svn-id: svn://10.0.0.236/trunk@257154 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
hannes%helma.at 2009-05-11 10:02:15 +00:00
parent 820eba390f
commit eb22974326

View File

@ -626,7 +626,7 @@ public class Parser
}
// Would prefer not to call createDestructuringAssignment until codegen,
// but the symbol definitions have to happen now, before body is parsed.
Node destructuring = null;
Map<String, Node> destructuring = null;
do {
int tt = peekToken();
if (tt == Token.LB || tt == Token.LC) {
@ -637,14 +637,11 @@ public class Parser
// parameter name, and add a statement to the body to initialize
// variables from the destructuring assignment
if (destructuring == null) {
destructuring = new Node(Token.COMMA);
destructuring = new HashMap<String, Node>();
}
String pname = currentScriptOrFn.getNextTempName();
defineSymbol(Token.LP, pname, false);
Node nameNode = createName(pname);
Node assign = createDestructuringAssignment(Token.VAR,
expr, nameNode);
destructuring.addChildToBack(assign);
destructuring.put(pname, expr);
} else {
if (mustMatchToken(Token.NAME, "msg.no.parm")) {
fnNode.addParam(createNameNode());
@ -656,7 +653,15 @@ public class Parser
} while (matchToken(Token.COMMA));
if (destructuring != null) {
fnNode.putProp(Node.DESTRUCTURING_PARAMS, destructuring);
Node destructuringNode = new Node(Token.COMMA);
// Add assignment helper for each destructuring parameter
for (Map.Entry<String, Node> param: destructuring.entrySet()) {
Node assign = createDestructuringAssignment(Token.VAR,
param.getValue(), createName(param.getKey()));
destructuringNode.addChildToBack(assign);
}
fnNode.putProp(Node.DESTRUCTURING_PARAMS, destructuringNode);
}
if (mustMatchToken(Token.RP, "msg.no.paren.after.parms")) {