Fix for Issue #655. Leading empty commas in ArgLists are now disallowed.

This commit is contained in:
Jeremy Ashkenas
2010-09-08 21:39:51 -04:00
parent df414dab02
commit 18cbddff6a
3 changed files with 128 additions and 118 deletions

View File

@@ -281,7 +281,9 @@
}) })
], ],
Arguments: [ Arguments: [
o("CALL_START ArgList OptComma CALL_END", function() { o("CALL_START CALL_END", function() {
return [];
}), o("CALL_START ArgList OptComma CALL_END", function() {
return $2; return $2;
}) })
], ],
@@ -326,19 +328,21 @@
}) })
], ],
Array: [ Array: [
o("[ ArgList OptComma ]", function() { o("[ ]", function() {
return new ArrayNode([]);
}), o("[ ArgList OptComma ]", function() {
return new ArrayNode($2); return new ArrayNode($2);
}) })
], ],
ArgList: [ ArgList: [
o("", function() { o("Arg", function() {
return [];
}), o("Arg", function() {
return [$1]; return [$1];
}), o("ArgList , Arg", function() { }), o("ArgList , Arg", function() {
return $1.concat([$3]); return $1.concat([$3]);
}), o("ArgList OptComma TERMINATOR Arg", function() { }), o("ArgList OptComma TERMINATOR Arg", function() {
return $1.concat([$4]); return $1.concat([$4]);
}), o("INDENT ArgList OptComma OUTDENT", function() {
return $2;
}), o("ArgList OptComma INDENT ArgList OptComma OUTDENT", function() { }), o("ArgList OptComma INDENT ArgList OptComma OUTDENT", function() {
return $1.concat($4); return $1.concat($4);
}) })

File diff suppressed because one or more lines are too long

View File

@@ -325,6 +325,7 @@ grammar =
# The list of arguments to a function call. # The list of arguments to a function call.
Arguments: [ Arguments: [
o "CALL_START CALL_END", -> []
o "CALL_START ArgList OptComma CALL_END", -> $2 o "CALL_START ArgList OptComma CALL_END", -> $2
] ]
@@ -364,6 +365,7 @@ grammar =
# The array literal. # The array literal.
Array: [ Array: [
o "[ ]", -> new ArrayNode []
o "[ ArgList OptComma ]", -> new ArrayNode $2 o "[ ArgList OptComma ]", -> new ArrayNode $2
] ]
@@ -371,10 +373,10 @@ grammar =
# as well as the contents of an array literal # as well as the contents of an array literal
# (i.e. comma-separated expressions). Newlines work as well. # (i.e. comma-separated expressions). Newlines work as well.
ArgList: [ ArgList: [
o "", -> []
o "Arg", -> [$1] o "Arg", -> [$1]
o "ArgList , Arg", -> $1.concat [$3] o "ArgList , Arg", -> $1.concat [$3]
o "ArgList OptComma TERMINATOR Arg", -> $1.concat [$4] o "ArgList OptComma TERMINATOR Arg", -> $1.concat [$4]
o "INDENT ArgList OptComma OUTDENT", -> $2
o "ArgList OptComma INDENT ArgList OptComma OUTDENT", -> $1.concat $4 o "ArgList OptComma INDENT ArgList OptComma OUTDENT", -> $1.concat $4
] ]