Changeset 60697 in webkit
- Timestamp:
- Jun 4, 2010 12:30:09 PM (14 years ago)
- Location:
- trunk/WebCore
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/WebCore/ChangeLog
r60696 r60697 1 2010-06-04 Adam Barth <abarth@webkit.org> 2 3 Reviewed by Eric Seidel. 4 5 Make HTML5Lexer go fast 6 https://bugs.webkit.org/show_bug.cgi?id=40048 7 8 More small steps. This patch deals with emitting tokens. 9 10 * html/HTML5Lexer.cpp: 11 (WebCore::HTML5Lexer::nextToken): 12 1 13 2010-06-04 Adam Barth <abarth@webkit.org> 2 14 -
trunk/WebCore/html/HTML5Lexer.cpp
r60696 r60697 322 322 #define END_STATE() ASSERT_NOT_REACHED(); break; 323 323 324 #define EMIT_AND_RESUME_IN(stateName) \ 325 do { \ 326 emitCurrentToken(); \ 327 m_state = DataState; \ 328 } while (false) 329 324 330 // We'd like to use the standard do { } while (false) pattern here, but it 325 331 // doesn't play nicely with continue. … … 476 482 m_state = SelfClosingStartTagState; 477 483 else if (cc == '>') { 478 emitCurrentToken(); 479 m_state = DataState; 484 EMIT_AND_RESUME_IN(DataState); 480 485 } else if (cc >= 'A' && cc <= 'Z') 481 486 m_token->appendToName(toLowerCase(cc)); … … 948 953 m_state = SelfClosingStartTagState; 949 954 else if (cc == '>') { 950 emitCurrentToken(); 951 m_state = DataState; 955 EMIT_AND_RESUME_IN(DataState); 952 956 } else if (cc >= 'A' && cc <= 'Z') { 953 957 m_token->addNewAttribute(); … … 974 978 m_state = BeforeAttributeValueState; 975 979 else if (cc == '>') { 976 emitCurrentToken(); 977 m_state = DataState; 980 EMIT_AND_RESUME_IN(DataState); 978 981 } else if (cc >= 'A' && cc <= 'Z') 979 982 m_token->appendToAttributeName(toLowerCase(cc)); … … 997 1000 m_state = BeforeAttributeValueState; 998 1001 else if (cc == '=') { 999 emitCurrentToken(); 1000 m_state = DataState; 1002 EMIT_AND_RESUME_IN(DataState); 1001 1003 } else if (cc >= 'A' && cc <= 'Z') { 1002 1004 m_token->addNewAttribute(); … … 1026 1028 else if (cc == '>') { 1027 1029 emitParseError(); 1028 emitCurrentToken(); 1029 m_state = DataState; 1030 EMIT_AND_RESUME_IN(DataState); 1030 1031 } else { 1031 1032 if (cc == '<' || cc == '=' || cc == '`') … … 1071 1072 m_additionalAllowedCharacter = '>'; 1072 1073 } else if (cc == '>') { 1073 emitCurrentToken(); 1074 m_state = DataState; 1074 EMIT_AND_RESUME_IN(DataState); 1075 1075 } else { 1076 1076 if (cc == '"' || cc == '\'' || cc == '<' || cc == '=' || cc == '`') … … 1118 1118 m_state = SelfClosingStartTagState; 1119 1119 else if (cc == '>') { 1120 emitCurrentToken(); 1121 m_state = DataState; 1120 EMIT_AND_RESUME_IN(DataState); 1122 1121 } else { 1123 1122 emitParseError(); … … 1132 1131 if (cc == '>') { 1133 1132 notImplemented(); 1134 emitCurrentToken(); 1135 m_state = DataState; 1133 EMIT_AND_RESUME_IN(DataState); 1136 1134 } else { 1137 1135 emitParseError(); … … 1152 1150 source.advance(m_lineNumber); 1153 1151 } 1154 emitCurrentToken(); 1155 m_state = DataState; 1152 EMIT_AND_RESUME_IN(DataState); 1156 1153 if (source.isEmpty()) 1157 1154 return true; … … 1194 1191 else if (cc == '>') { 1195 1192 emitParseError(); 1196 emitCurrentToken(); 1197 m_state = DataState; 1193 EMIT_AND_RESUME_IN(DataState); 1198 1194 } else { 1199 1195 m_token->appendToComment(cc); … … 1210 1206 else if (cc == '>') { 1211 1207 emitParseError(); 1212 emitCurrentToken(); 1213 m_state = DataState; 1208 EMIT_AND_RESUME_IN(DataState); 1214 1209 } else { 1215 1210 m_token->appendToComment('-'); … … 1247 1242 BEGIN_STATE(CommentEndState) { 1248 1243 if (cc == '>') { 1249 emitCurrentToken(); 1250 m_state = DataState; 1244 EMIT_AND_RESUME_IN(DataState); 1251 1245 } else if (cc == '\x09' || cc == '\x0A' || cc == '\x0C' || cc == ' ') { 1252 1246 emitParseError(); … … 1281 1275 m_state = CommentEndDashState; 1282 1276 } else if (cc == '>') { 1283 emitCurrentToken(); 1284 m_state = DataState; 1277 EMIT_AND_RESUME_IN(DataState); 1285 1278 } else { 1286 1279 m_token->appendToComment('-'); … … 1301 1294 m_state = CommentEndDashState; 1302 1295 else if (cc == '>') { 1303 emitCurrentToken(); 1304 m_state = DataState; 1296 EMIT_AND_RESUME_IN(DataState); 1305 1297 } else { 1306 1298 m_token->appendToComment(cc); … … 1334 1326 m_token->beginDOCTYPE(); 1335 1327 notImplemented(); 1336 emitCurrentToken(); 1337 m_state = DataState; 1328 EMIT_AND_RESUME_IN(DataState); 1338 1329 } else { 1339 1330 m_token->beginDOCTYPE(cc); … … 1349 1340 m_state = AfterDOCTYPENameState; 1350 1341 else if (cc == '>') { 1351 emitCurrentToken(); 1352 m_state = DataState; 1342 EMIT_AND_RESUME_IN(DataState); 1353 1343 } else if (cc >= 'A' && cc <= 'Z') 1354 1344 m_token->appendToName(toLowerCase(cc)); … … 1364 1354 break; 1365 1355 if (cc == '>') { 1366 emitCurrentToken(); 1367 m_state = DataState; 1356 EMIT_AND_RESUME_IN(DataState); 1368 1357 } else { 1369 1358 DEFINE_STATIC_LOCAL(String, publicString, ("public")); … … 1407 1396 emitParseError(); 1408 1397 notImplemented(); 1409 emitCurrentToken(); 1410 m_state = DataState; 1398 EMIT_AND_RESUME_IN(DataState); 1411 1399 } else { 1412 1400 emitParseError(); … … 1431 1419 emitParseError(); 1432 1420 notImplemented(); 1433 emitCurrentToken(); 1434 m_state = DataState; 1421 EMIT_AND_RESUME_IN(DataState); 1435 1422 } else { 1436 1423 emitParseError(); … … 1449 1436 emitParseError(); 1450 1437 notImplemented(); 1451 emitCurrentToken(); 1452 m_state = DataState; 1438 EMIT_AND_RESUME_IN(DataState); 1453 1439 } else 1454 1440 m_token->appendToPublicIdentifier(cc); … … 1464 1450 emitParseError(); 1465 1451 notImplemented(); 1466 emitCurrentToken(); 1467 m_state = DataState; 1452 EMIT_AND_RESUME_IN(DataState); 1468 1453 } else 1469 1454 m_token->appendToPublicIdentifier(cc); … … 1477 1462 m_state = BetweenDOCTYPEPublicAndSystemIdentifiersState; 1478 1463 else if (cc == '>') { 1479 emitCurrentToken(); 1480 m_state = DataState; 1464 EMIT_AND_RESUME_IN(DataState); 1481 1465 } else if (cc == '"') { 1482 1466 emitParseError(); … … 1501 1485 m_state = BetweenDOCTYPEPublicAndSystemIdentifiersState; 1502 1486 else if (cc == '>') { 1503 emitCurrentToken(); 1504 m_state = DataState; 1487 EMIT_AND_RESUME_IN(DataState); 1505 1488 } else if (cc == '"') { 1506 1489 m_token->setSystemIdentifierToEmptyString(); … … 1533 1516 emitParseError(); 1534 1517 notImplemented(); 1535 emitCurrentToken(); 1536 m_state = DataState; 1518 EMIT_AND_RESUME_IN(DataState); 1537 1519 } else { 1538 1520 emitParseError(); … … 1557 1539 emitParseError(); 1558 1540 notImplemented(); 1559 emitCurrentToken(); 1560 m_state = DataState; 1541 EMIT_AND_RESUME_IN(DataState); 1561 1542 } else { 1562 1543 emitParseError(); … … 1575 1556 emitParseError(); 1576 1557 notImplemented(); 1577 emitCurrentToken(); 1578 m_state = DataState; 1558 EMIT_AND_RESUME_IN(DataState); 1579 1559 } else 1580 1560 m_token->appendToSystemIdentifier(cc); … … 1590 1570 emitParseError(); 1591 1571 notImplemented(); 1592 emitCurrentToken(); 1593 m_state = DataState; 1572 EMIT_AND_RESUME_IN(DataState); 1594 1573 } else 1595 1574 m_token->appendToSystemIdentifier(cc); … … 1603 1582 break; 1604 1583 else if (cc == '>') { 1605 emitCurrentToken(); 1606 m_state = DataState; 1584 EMIT_AND_RESUME_IN(DataState); 1607 1585 } else { 1608 1586 emitParseError(); … … 1616 1594 BEGIN_STATE(BogusDOCTYPEState) { 1617 1595 if (cc == '>') { 1618 emitCurrentToken(); 1619 m_state = DataState; 1596 EMIT_AND_RESUME_IN(DataState); 1620 1597 } 1621 1598 // FIXME: Handle EOF properly.
Note: See TracChangeset
for help on using the changeset viewer.