зеркало из https://github.com/mozilla/gecko-dev.git
Bug 335051 - E4X literals should be acceptable values for sharp variables. r=jwalden
--HG-- extra : rebase_source : 3548ee497fa3d8fe36077d42d8a44f953cf90b6d
This commit is contained in:
Родитель
8542ab22a5
Коммит
b2f96b0ac7
|
@ -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');
|
||||
}
|
Загрузка…
Ссылка в новой задаче