Bug 335051 - E4X literals should be acceptable values for sharp variables. r=jwalden

--HG--
extra : rebase_source : 3548ee497fa3d8fe36077d42d8a44f953cf90b6d
This commit is contained in:
Rasmus Jensen 2010-05-06 16:01:37 -07:00
Родитель 8542ab22a5
Коммит b2f96b0ac7
3 изменённых файлов: 80 добавлений и 9 удалений

Просмотреть файл

@ -8066,18 +8066,23 @@ Parser::primaryExpr(TokenKind tt, JSBool afterDot)
return NULL;
pn->pn_num = (jsint) tokenStream.currentToken().t_dval;
tt = tokenStream.getToken(TSF_OPERAND);
if (tt == TOK_USESHARP || tt == TOK_DEFSHARP ||
#if JS_HAS_XML_SUPPORT
tt == TOK_STAR || tt == TOK_AT ||
tt == TOK_XMLSTAGO /* XXXbe could be sharp? */ ||
#endif
tt == TOK_STRING || tt == TOK_NUMBER || tt == TOK_PRIMARY) {
reportErrorNumber(NULL, JSREPORT_ERROR, JSMSG_BAD_SHARP_VAR_DEF);
return NULL;
}
pn->pn_kid = primaryExpr(tt, JS_FALSE);
if (!pn->pn_kid)
return NULL;
if (PN_TYPE(pn->pn_kid) == TOK_USESHARP ||
PN_TYPE(pn->pn_kid) == TOK_DEFSHARP ||
#if JS_HAS_XML_SUPPORT
PN_TYPE(pn->pn_kid) == TOK_XMLCOMMENT ||
PN_TYPE(pn->pn_kid) == TOK_XMLCDATA ||
PN_TYPE(pn->pn_kid) == TOK_XMLPTAGC ||
PN_TYPE(pn->pn_kid) == TOK_XMLELEM ||
#endif
PN_TYPE(pn->pn_kid) == TOK_STRING ||
PN_TYPE(pn->pn_kid) == TOK_NUMBER ||
PN_TYPE(pn->pn_kid) == TOK_PRIMARY) {
reportErrorNumber(pn->pn_kid, JSREPORT_ERROR, JSMSG_BAD_SHARP_VAR_DEF);
return NULL;
}
if (!tc->ensureSharpSlots())
return NULL;
break;

Просмотреть файл

@ -5,6 +5,7 @@ script regress-313080.js
script regress-321547.js
script regress-327534.js
script regress-327897.js
script regress-335051.js
script regress-337226.js
script regress-352846-01.js
script regress-352846-02.js

Просмотреть файл

@ -0,0 +1,65 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/*
* Any copyright is dedicated to the Public Domain.
* http://creativecommons.org/licenses/publicdomain/
* Contributor:
* rje(a)dbc.dk
*/
var gTestfile = 'regress-335051.js';
//-----------------------------------------------------------------------------
var BUGNUMBER = 335051;
var summary = 'E4X literals should be acceptable values for sharp variables';
var actual = '';
var expect = '';
//-----------------------------------------------------------------------------
test();
//-----------------------------------------------------------------------------
function testSyntax(syntax, isValid) {
var result;
try {
eval(syntax);
result = true;
} catch(exception) {
if (SyntaxError.prototype.isPrototypeOf(exception)) {
result = false;
}
}
reportCompare(isValid, result, "test " + (isValid?"":"in") + "valid syntax: " + syntax);
}
function test()
{
enterFunc ('test');
printBugNumber(BUGNUMBER);
printStatus (summary);
var oldVersion = false;
testSyntax("#1={}", true);
testSyntax("#1=[]", true);
testSyntax("#1=([])", true);
testSyntax("#1=[1, 2, 3]", true);
testSyntax("#1={a:1, b:2}", true);
testSyntax("#1=function() { }", true);
testSyntax("#1=(new Date())", true);
testSyntax("#1=<a/>", false);
testSyntax("#1=<!-- -->", false);
testSyntax("#1=<a>b</a>", false);
testSyntax("[#1=<a>b</a>, #1#]", false);
testSyntax("#1=(<a/>)", false);
testSyntax("#1=(<![CDATA[foo]]>)", false);
testSyntax("#1=123", false);
testSyntax("#1='foo'", false);
testSyntax("#1=1+2", false);
testSyntax("#1=-1", false);
testSyntax("#1=(123)", false);
testSyntax("#1=true", false);
exitFunc ('test');
}