Changeset 129737 in webkit
- Timestamp:
- Sep 27, 2012 1:13:15 AM (12 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r129734 r129737 1 2012-09-27 Takashi Sakamoto <tasak@google.com> 2 3 Follow-up to r129723 to once more allow parsing of scoped names in IDL files. 4 5 Reviewed by Kentaro Hara. 6 7 This functionality was supported by the old IDL parser but was lost in the rewrite of the parser 8 in r129723. It is being reinstated to unbreak clients that currently depend on it, but will likely 9 be removed in the future once those clients have a chance to adopt an approach that more closely 10 follows the WebIDL syntax. 11 12 * bindings/scripts/IDLParser.pm: 13 (parseDefinition): 14 (parseInheritance): 15 (parseImplementsStatement): 16 (parseExtendedAttribute): 17 (parseExtendedAttribute2): 18 (parseExtendedAttributeRest2): 19 (parseExtendedAttributeRest3): 20 (parseScopedNameListNoComma): 21 (parseNonAnyType): 22 (parseExceptionList): 23 (parseDefinitionOld): 24 (parseScopedName): 25 (parseAbsoluteScopedName): 26 (parseRelativeScopedName): 27 (parseScopedNameParts): 28 (parseScopedNameList): 29 (parseScopedNames): 30 1 31 2012-09-27 Yury Semikhatsky <yurys@chromium.org> 2 32 -
trunk/Source/WebCore/bindings/scripts/IDLParser.pm
r129723 r129737 209 209 my $nextPrimitiveType_2 = '^(double|float|unrestricted)$'; 210 210 my $nextSetGetRaises2_1 = '^(;|getraises|setraises)$'; 211 my $nextArgumentList_1 = '^(\(| ByteString|DOMString|Date|\[|any|boolean|byte|double|float|in|int|long|object|octet|optional|sequence|short|unrestricted|unsigned)$';211 my $nextArgumentList_1 = '^(\(|::|ByteString|DOMString|Date|\[|any|boolean|byte|double|float|in|int|long|object|octet|optional|sequence|short|unrestricted|unsigned)$'; 212 212 my $nextNonAnyType_1 = '^(boolean|byte|double|float|int|long|octet|short|unrestricted|unsigned)$'; 213 my $nextInterfaceMemberOld_1 = '^(\(| ByteString|DOMString|Date|any|attribute|boolean|byte|creator|deleter|double|float|getter|inherit|int|legacycaller|long|object|octet|readonly|sequence|serializer|setter|short|static|stringifier|unrestricted|unsigned|void)$';213 my $nextInterfaceMemberOld_1 = '^(\(|::|ByteString|DOMString|Date|any|attribute|boolean|byte|creator|deleter|double|float|getter|inherit|int|legacycaller|long|object|octet|readonly|sequence|serializer|setter|short|static|stringifier|unrestricted|unsigned|void)$'; 214 214 my $nextOptionalIteratorInterfaceOrObject_1 = '^(;|=)$'; 215 215 my $nextAttributeOrOperationOrIterator_1 = '^(static|stringifier)$'; 216 my $nextAttributeOrOperationOrIterator_2 = '^(\(| ByteString|DOMString|Date|any|boolean|byte|creator|deleter|double|float|getter|int|legacycaller|long|object|octet|sequence|setter|short|unrestricted|unsigned|void)$';216 my $nextAttributeOrOperationOrIterator_2 = '^(\(|::|ByteString|DOMString|Date|any|boolean|byte|creator|deleter|double|float|getter|int|legacycaller|long|object|octet|sequence|setter|short|unrestricted|unsigned|void)$'; 217 217 my $nextUnrestrictedFloatType_1 = '^(double|float)$'; 218 my $nextExtendedAttributeRest3_1 = '^( ,|\])$';219 my $nextExceptionField_1 = '^(\(| ByteString|DOMString|Date|any|boolean|byte|double|float|int|long|object|octet|sequence|short|unrestricted|unsigned)$';220 my $nextType_1 = '^( ByteString|DOMString|Date|any|boolean|byte|double|float|int|long|object|octet|sequence|short|unrestricted|unsigned)$';218 my $nextExtendedAttributeRest3_1 = '^(\,|::|\])$'; 219 my $nextExceptionField_1 = '^(\(|::|ByteString|DOMString|Date|any|boolean|byte|double|float|int|long|object|octet|sequence|short|unrestricted|unsigned)$'; 220 my $nextType_1 = '^(::|ByteString|DOMString|Date|any|boolean|byte|double|float|int|long|object|octet|sequence|short|unrestricted|unsigned)$'; 221 221 my $nextSpecials_1 = '^(creator|deleter|getter|legacycaller|setter)$'; 222 my $nextDefinitions_1 = '^( callback|dictionary|enum|exception|interface|partial|typedef)$';223 my $nextExceptionMembers_1 = '^(\(| ByteString|DOMString|Date|\[|any|boolean|byte|const|double|float|int|long|object|octet|optional|sequence|short|unrestricted|unsigned)$';222 my $nextDefinitions_1 = '^(::|callback|dictionary|enum|exception|interface|partial|typedef)$'; 223 my $nextExceptionMembers_1 = '^(\(|::|ByteString|DOMString|Date|\[|any|boolean|byte|const|double|float|int|long|object|octet|optional|sequence|short|unrestricted|unsigned)$'; 224 224 my $nextAttributeRest_1 = '^(attribute|readonly)$'; 225 my $nextSingleType_1 = '^(ByteString|DOMString|Date|boolean|byte|double|float|int|long|object|octet|sequence|short|unrestricted|unsigned)$'; 225 my $nextInterfaceMembers_1 = '^(\(|::|ByteString|DOMString|Date|any|attribute|boolean|byte|const|creator|deleter|double|float|getter|inherit|int|legacycaller|long|object|octet|readonly|sequence|serializer|setter|short|static|stringifier|unrestricted|unsigned|void)$'; 226 my $nextSingleType_1 = '^(::|ByteString|DOMString|Date|boolean|byte|double|float|int|long|object|octet|sequence|short|unrestricted|unsigned)$'; 226 227 my $nextGet_1 = '^(;|getraises|getter|setraises|setter)$'; 227 228 my $nextArgumentName_1 = '^(attribute|callback|const|creator|deleter|dictionary|enum|exception|getter|implements|inherit|interface|legacycaller|partial|serializer|setter|static|stringifier|typedef|unrestricted)$'; … … 229 230 my $nextConstValue_2 = '^(-|Infinity|NaN)$'; 230 231 my $nextDefinition_1 = '^(callback|interface)$'; 231 my $nextAttributeOrOperationRest_1 = '^(\(| ByteString|DOMString|Date|any|boolean|byte|double|float|int|long|object|octet|sequence|short|unrestricted|unsigned|void)$';232 my $nextAttributeOrOperationRest_1 = '^(\(|::|ByteString|DOMString|Date|any|boolean|byte|double|float|int|long|object|octet|sequence|short|unrestricted|unsigned|void)$'; 232 233 my $nextUnsignedIntegerType_1 = '^(int|long|short)$'; 233 my $nextInterfaceMembers_1 = '^(\(|ByteString|DOMString|Date|any|attribute|boolean|byte|const|creator|deleter|double|float|getter|inherit|int|legacycaller|long|object|octet|readonly|sequence|serializer|setter|short|static|stringifier|unrestricted|unsigned|void)$';234 234 my $nextDefaultValue_1 = '^(-|Infinity|NaN|false|null|true)$'; 235 235 236 236 237 sub parseDefinitions … … 281 282 return $self->parseTypedef($extendedAttributeList); 282 283 } 283 if ($next->type() == IdentifierToken ) {284 if ($next->type() == IdentifierToken || $next->value() eq "::") { 284 285 return $self->parseImplementsStatement($extendedAttributeList); 285 286 } … … 572 573 if ($next->value() eq ":") { 573 574 $self->assertTokenValue($self->getToken(), ":", __LINE__); 574 my $token = $self->getToken(); 575 $self->assertTokenType($token, IdentifierToken); 576 push(@parent, $token->value()); 575 my $scopedName = $self->parseScopedName(); 576 push(@parent, $scopedName); 577 577 # Multiple inheritance? 578 578 push(@parent, @{$self->parseIdentifiers()}); … … 665 665 my $next = $self->nextToken(); 666 666 if ($next->type() == IdentifierToken) { 667 $self-> assertTokenType($self->getToken(), IdentifierToken);667 $self->parseScopedName(); 668 668 $self->assertTokenValue($self->getToken(), "implements", __LINE__); 669 $self-> assertTokenType($self->getToken(), IdentifierToken);669 $self->parseScopedName(); 670 670 $self->assertTokenValue($self->getToken(), ";", __LINE__); 671 671 return; … … 1369 1369 my $self = shift; 1370 1370 my $next = $self->nextToken(); 1371 if ($next->type() == IdentifierToken ) {1372 my $ token = $self->getToken();1373 return $self->parseExtendedAttributeRest($ token->value());1371 if ($next->type() == IdentifierToken || $next->value() eq "::") { 1372 my $scopedName = $self->parseScopedName(); 1373 return $self->parseExtendedAttributeRest($scopedName); 1374 1374 } 1375 1375 # backward compatibility. Spec doesn' allow "[]". But WebKit requires. … … 1384 1384 my $self = shift; 1385 1385 my $next = $self->nextToken(); 1386 if ($next->type() == IdentifierToken ) {1387 my $ token = $self->getToken();1388 return $self->parseExtendedAttributeRest($ token->value());1386 if ($next->type() == IdentifierToken || $next->value() eq "::") { 1387 my $scopedName = $self->parseScopedName(); 1388 return $self->parseExtendedAttributeRest($scopedName); 1389 1389 } 1390 1390 return {}; … … 1422 1422 my $self = shift; 1423 1423 my $next = $self->nextToken(); 1424 if ($next->type() == IdentifierToken ) {1425 my $ token = $self->getToken();1426 return $self->parseExtendedAttributeRest3($ token->value());1424 if ($next->type() == IdentifierToken || $next->value() eq "::") { 1425 my $scopedName = $self->parseScopedName(); 1426 return $self->parseExtendedAttributeRest3($scopedName); 1427 1427 } 1428 1428 if ($next->type() == IntegerToken) { … … 1441 1441 if ($next->value() eq "&") { 1442 1442 $self->assertTokenValue($self->getToken(), "&", __LINE__); 1443 my $token = $self->getToken(); 1444 $self->assertTokenType($token, IdentifierToken); 1445 return $name . "&" . $token->value(); 1443 my $rightValue = $self->parseScopedName(); 1444 return $name . "&" . $rightValue; 1446 1445 } 1447 1446 if ($next->value() eq "|") { 1448 1447 $self->assertTokenValue($self->getToken(), "|", __LINE__); 1449 my $token = $self->getToken(); 1450 $self->assertTokenType($token, IdentifierToken); 1451 return $name . "|" . $token->value(); 1448 my $rightValue = $self->parseScopedName(); 1449 return $name . "|" . $rightValue; 1452 1450 } 1453 1451 if ($next->value() eq "(") { … … 1461 1459 my @names = (); 1462 1460 push(@names, $name); 1463 push(@names, @{$self->parse IdentifierList()});1461 push(@names, @{$self->parseScopedNameListNoComma()}); 1464 1462 return join(' ', @names); 1465 1463 } … … 1467 1465 } 1468 1466 1469 sub parse IdentifierList1467 sub parseScopedNameListNoComma 1470 1468 { 1471 1469 my $self = shift; … … 1474 1472 while (1) { 1475 1473 my $next = $self->nextToken(); 1476 if ($next->type() == IdentifierToken ) {1477 push(@names, $self-> getToken()->value());1474 if ($next->type() == IdentifierToken || $next->value() eq "::") { 1475 push(@names, $self->parseScopedName()); 1478 1476 } else { 1479 1477 last; … … 1659 1657 return "Date" . $self->parseTypeSuffix(); 1660 1658 } 1661 if ($next->type() == IdentifierToken ) {1662 my $ token = $self->getToken();1663 return $ token->value(). $self->parseTypeSuffix();1659 if ($next->type() == IdentifierToken || $next->value() eq "::") { 1660 my $name = $self->parseScopedName(); 1661 return $name . $self->parseTypeSuffix(); 1664 1662 } 1665 1663 $self->assertUnexpectedToken($next->value(), __LINE__); … … 1968 1966 my @exceptions = (); 1969 1967 $self->assertTokenValue($self->getToken(), "(", __LINE__); 1970 my $token = $self->getToken(); 1971 $self->assertTokenType($token, IdentifierToken); 1972 push(@exceptions, $token->value()); 1973 push(@exceptions, @{$self->parseIdentifiers()}); 1968 push(@exceptions, @{$self->parseScopedNameList()}); 1974 1969 $self->assertTokenValue($self->getToken(), ")", __LINE__); 1975 1970 return \@exceptions; … … 2014 2009 return $self->parseModule(); 2015 2010 } 2016 if ($next->type() == IdentifierToken ) {2011 if ($next->type() == IdentifierToken || $next->value() eq "::") { 2017 2012 return $self->parseImplementsStatement({}); 2018 2013 } … … 2272 2267 $self->assertTokenValue($self->getToken(), ";", __LINE__); 2273 2268 } 2269 } 2270 2271 sub parseScopedName 2272 { 2273 my $self = shift; 2274 my $next = $self->nextToken(); 2275 if ($next->value() eq "::") { 2276 return $self->parseAbsoluteScopedName(); 2277 } 2278 if ($next->type() == IdentifierToken) { 2279 return $self->parseRelativeScopedName(); 2280 } 2281 $self->assertUnexpectedToken($next->value()); 2282 } 2283 2284 sub parseAbsoluteScopedName 2285 { 2286 my $self = shift; 2287 my $next = $self->nextToken(); 2288 if ($next->value() eq "::") { 2289 $self->assertTokenValue($self->getToken(), "::"); 2290 my $token = $self->getToken(); 2291 $self->assertTokenType($token, IdentifierToken); 2292 return "::" . $token->value() . $self->parseScopedNameParts(); 2293 } 2294 $self->assertUnexpectedToken($next->value()); 2295 } 2296 2297 sub parseRelativeScopedName 2298 { 2299 my $self = shift; 2300 my $next = $self->nextToken(); 2301 if ($next->type() == IdentifierToken) { 2302 my $token = $self->getToken(); 2303 return $token->value() . $self->parseScopedNameParts(); 2304 } 2305 $self->assertUnexpectedToken($next->value()); 2306 } 2307 2308 sub parseScopedNameParts 2309 { 2310 my $self = shift; 2311 my @names = (); 2312 2313 while (1) { 2314 my $next = $self->nextToken(); 2315 if ($next->value() eq "::") { 2316 $self->assertTokenValue($self->getToken(), "::"); 2317 push(@names, "::"); 2318 my $token = $self->getToken(); 2319 $self->assertTokenType($token, IdentifierToken); 2320 push(@names, $token->value()); 2321 } else { 2322 last; 2323 } 2324 } 2325 return join("", @names); 2326 } 2327 2328 sub parseScopedNameList 2329 { 2330 my $self = shift; 2331 my $next = $self->nextToken(); 2332 if ($next->type() == IdentifierToken || $next->value() eq "::") { 2333 my @names = (); 2334 push(@names, $self->parseScopedName()); 2335 push(@names, @{$self->parseScopedNames()}); 2336 return \@names; 2337 } 2338 $self->assertUnexpectedToken($next->value(), __LINE__); 2339 } 2340 2341 sub parseScopedNames 2342 { 2343 my $self = shift; 2344 my @names = (); 2345 2346 while (1) { 2347 my $next = $self->nextToken(); 2348 if ($next->value() eq ",") { 2349 $self->assertTokenValue($self->getToken(), ","); 2350 push(@names, $self->parseScopedName()); 2351 } else { 2352 last; 2353 } 2354 } 2355 return \@names; 2274 2356 } 2275 2357
Note: See TracChangeset
for help on using the changeset viewer.