Skip to content

Commit

Permalink
Test262 chapter07
Browse files Browse the repository at this point in the history
TokenStream:
- remove check for isJSFormatChar() in getChar[IgnoreLineEnd](), no longer neccessary in ES5
- amend readRegExp() to catch some additional invalid regular expression literals
- update keyword list in stringToKeyword() to match ES5
- getToken():
-- unicode escaped identifiers still need to comply to identifier naming rules
-- save string for Token.RESERVED (needed in Parser)
-- hex-integer needs at least one hex-digit
-- invalid escape sequences in string literals now result in an error

Parser:
- remove unused second argument of propertyName() to facilitate code reuse
- no longer check for isReservedKeywordAsIdentifier() in convertToName() since ES5 allows identifier names in object literals and property access
- handle Token.RESERVED in convertToName()
  • Loading branch information
anba committed Mar 21, 2012
1 parent 832d891 commit 2164382
Show file tree
Hide file tree
Showing 2 changed files with 104 additions and 135 deletions.
38 changes: 18 additions & 20 deletions src/org/mozilla/javascript/Parser.java
Original file line number Diff line number Diff line change
Expand Up @@ -2617,18 +2617,18 @@ private AstNode propertyAccess(int tt, AstNode pn)
case Token.THROW:
// needed for generator.throw();
saveNameTokenData(ts.tokenBeg, "throw", ts.lineno);
ref = propertyName(-1, "throw", memberTypeFlags);
ref = propertyName(-1, memberTypeFlags);
break;

case Token.NAME:
// handles: name, ns::name, ns::*, ns::[expr]
ref = propertyName(-1, ts.getString(), memberTypeFlags);
ref = propertyName(-1, memberTypeFlags);
break;

case Token.MUL:
// handles: *, *::name, *::*, *::[expr]
saveNameTokenData(ts.tokenBeg, "*", ts.lineno);
ref = propertyName(-1, "*", memberTypeFlags);
ref = propertyName(-1, memberTypeFlags);
break;

case Token.XMLATTR:
Expand All @@ -2638,14 +2638,10 @@ private AstNode propertyAccess(int tt, AstNode pn)
break;

default:
if (compilerEnv.isReservedKeywordAsIdentifier()) {
if (convertToName(token)) {
// allow keywords as property names, e.g. ({if: 1})
String name = Token.keywordToName(token);
if (name != null) {
saveNameTokenData(ts.tokenBeg, name, ts.lineno);
ref = propertyName(-1, name, memberTypeFlags);
break;
}
ref = propertyName(-1, memberTypeFlags);
break;
}
reportError("msg.no.name.after.dot");
return makeErrorNode();
Expand Down Expand Up @@ -2680,12 +2676,12 @@ private AstNode attributeAccess()
switch (tt) {
// handles: @name, @ns::name, @ns::*, @ns::[expr]
case Token.NAME:
return propertyName(atPos, ts.getString(), 0);
return propertyName(atPos, 0);

// handles: @*, @*::name, @*::*, @*::[expr]
case Token.MUL:
saveNameTokenData(ts.tokenBeg, "*", ts.lineno);
return propertyName(atPos, "*", 0);
return propertyName(atPos, 0);

// handles @[expr]
case Token.LB:
Expand All @@ -2712,7 +2708,7 @@ private AstNode attributeAccess()
* returns a Name node. Returns an ErrorNode for malformed XML
* expressions. (For now - might change to return a partial XmlRef.)
*/
private AstNode propertyName(int atPos, String s, int memberTypeFlags)
private AstNode propertyName(int atPos, int memberTypeFlags)
throws IOException
{
int pos = atPos != -1 ? atPos : ts.tokenBeg, lineno = ts.lineno;
Expand Down Expand Up @@ -2916,7 +2912,7 @@ private AstNode name(int ttFlagged, int tt) throws IOException {
saveNameTokenData(namePos, nameString, nameLineno);

if (compilerEnv.isXmlAvailable()) {
return propertyName(-1, nameString, 0);
return propertyName(-1, 0);
} else {
return createNameNode(true, Token.NAME);
}
Expand Down Expand Up @@ -3432,12 +3428,14 @@ private void saveNameTokenData(int pos, String name, int lineno) {

// Check whether token is a reserved keyword that is allowed as property id.
private boolean convertToName(int token) {
if (compilerEnv.isReservedKeywordAsIdentifier()) {
String conv = Token.keywordToName(token);
if (conv != null) {
saveNameTokenData(ts.tokenBeg, conv, ts.lineno);
return true;
}
if (token == Token.RESERVED) {
saveNameTokenData(ts.tokenBeg, ts.getString(), ts.lineno);
return true;
}
String conv = Token.keywordToName(token);
if (conv != null) {
saveNameTokenData(ts.tokenBeg, conv, ts.lineno);
return true;
}
return false;
}
Expand Down

0 comments on commit 2164382

Please sign in to comment.