| ... | ... | @@ -449,20 +449,12 @@ pub const Tokenizer = struct { |
| 449 | 449 | switch (state) { |
| 450 | 450 | .Start => switch (c) { |
| 451 | 451 | '\n' => { |
| 452 | | if (!self.pp_directive) { |
| 453 | | result.start = self.index + 1; |
| 454 | | continue; |
| 455 | | } |
| 456 | 452 | self.pp_directive = false; |
| 457 | 453 | result.id = .Nl; |
| 458 | 454 | self.index += 1; |
| 459 | 455 | break; |
| 460 | 456 | }, |
| 461 | 457 | '\r' => { |
| 462 | | if (!self.pp_directive) { |
| 463 | | result.start = self.index + 1; |
| 464 | | continue; |
| 465 | | } |
| 466 | 458 | state = .Cr; |
| 467 | 459 | }, |
| 468 | 460 | '"' => { |
| ... | ... | @@ -612,11 +604,14 @@ pub const Tokenizer = struct { |
| 612 | 604 | }, |
| 613 | 605 | .BackSlash => switch (c) { |
| 614 | 606 | '\n' => { |
| 615 | | state = .Start; |
| 607 | state = if (string) .AfterStringLiteral else .Start; |
| 616 | 608 | }, |
| 617 | 609 | '\r' => { |
| 618 | 610 | state = .BackSlashCr; |
| 619 | 611 | }, |
| 612 | '\t', '\x0B', '\x0C', ' ' => { |
| 613 | // TODO warn |
| 614 | }, |
| 620 | 615 | else => { |
| 621 | 616 | result.id = .Invalid; |
| 622 | 617 | break; |
| ... | ... | @@ -624,7 +619,7 @@ pub const Tokenizer = struct { |
| 624 | 619 | }, |
| 625 | 620 | .BackSlashCr => switch (c) { |
| 626 | 621 | '\n' => { |
| 627 | | state = .Start; |
| 622 | state = if (string) .AfterStringLiteral else .Start; |
| 628 | 623 | }, |
| 629 | 624 | else => { |
| 630 | 625 | result.id = .Invalid; |
| ... | ... | @@ -700,7 +695,14 @@ pub const Tokenizer = struct { |
| 700 | 695 | '"' => { |
| 701 | 696 | state = .StringLiteral; |
| 702 | 697 | }, |
| 703 | | '\n'...'\r', ' ' => {}, |
| 698 | '\\' => { |
| 699 | state = .BackSlash; |
| 700 | }, |
| 701 | '\n', '\r' => { |
| 702 | if (self.pp_directive) |
| 703 | break; |
| 704 | }, |
| 705 | '\t', '\x0B', '\x0C', ' ' => {}, |
| 704 | 706 | else => { |
| 705 | 707 | break; |
| 706 | 708 | }, |
| ... | ... | @@ -1314,60 +1316,64 @@ test "operators" { |
| 1314 | 1316 | \\ , & && &= ? < <= << |
| 1315 | 1317 | \\ <<= > >= >> >>= ~ # ## |
| 1316 | 1318 | \\ |
| 1317 | | , |
| 1318 | | &[_]Token.Id{ |
| 1319 | | .Bang, |
| 1320 | | .BangEqual, |
| 1321 | | .Pipe, |
| 1322 | | .PipePipe, |
| 1323 | | .PipeEqual, |
| 1324 | | .Equal, |
| 1325 | | .EqualEqual, |
| 1326 | | .LParen, |
| 1327 | | .RParen, |
| 1328 | | .LBrace, |
| 1329 | | .RBrace, |
| 1330 | | .LBracket, |
| 1331 | | .RBracket, |
| 1332 | | .Period, |
| 1333 | | .Period, |
| 1334 | | .Period, |
| 1335 | | .Ellipsis, |
| 1336 | | .Caret, |
| 1337 | | .CaretEqual, |
| 1338 | | .Plus, |
| 1339 | | .PlusPlus, |
| 1340 | | .PlusEqual, |
| 1341 | | .Minus, |
| 1342 | | .MinusMinus, |
| 1343 | | .MinusEqual, |
| 1344 | | .Asterisk, |
| 1345 | | .AsteriskEqual, |
| 1346 | | .Percent, |
| 1347 | | .PercentEqual, |
| 1348 | | .Arrow, |
| 1349 | | .Colon, |
| 1350 | | .Semicolon, |
| 1351 | | .Slash, |
| 1352 | | .SlashEqual, |
| 1353 | | .Comma, |
| 1354 | | .Ampersand, |
| 1355 | | .AmpersandAmpersand, |
| 1356 | | .AmpersandEqual, |
| 1357 | | .QuestionMark, |
| 1358 | | .AngleBracketLeft, |
| 1359 | | .AngleBracketLeftEqual, |
| 1360 | | .AngleBracketAngleBracketLeft, |
| 1361 | | .AngleBracketAngleBracketLeftEqual, |
| 1362 | | .AngleBracketRight, |
| 1363 | | .AngleBracketRightEqual, |
| 1364 | | .AngleBracketAngleBracketRight, |
| 1365 | | .AngleBracketAngleBracketRightEqual, |
| 1366 | | .Tilde, |
| 1367 | | .Hash, |
| 1368 | | .HashHash, |
| 1369 | | }, |
| 1370 | | ); |
| 1319 | , &[_]Token.Id{ |
| 1320 | .Bang, |
| 1321 | .BangEqual, |
| 1322 | .Pipe, |
| 1323 | .PipePipe, |
| 1324 | .PipeEqual, |
| 1325 | .Equal, |
| 1326 | .EqualEqual, |
| 1327 | .Nl, |
| 1328 | .LParen, |
| 1329 | .RParen, |
| 1330 | .LBrace, |
| 1331 | .RBrace, |
| 1332 | .LBracket, |
| 1333 | .RBracket, |
| 1334 | .Period, |
| 1335 | .Period, |
| 1336 | .Period, |
| 1337 | .Ellipsis, |
| 1338 | .Nl, |
| 1339 | .Caret, |
| 1340 | .CaretEqual, |
| 1341 | .Plus, |
| 1342 | .PlusPlus, |
| 1343 | .PlusEqual, |
| 1344 | .Minus, |
| 1345 | .MinusMinus, |
| 1346 | .MinusEqual, |
| 1347 | .Nl, |
| 1348 | .Asterisk, |
| 1349 | .AsteriskEqual, |
| 1350 | .Percent, |
| 1351 | .PercentEqual, |
| 1352 | .Arrow, |
| 1353 | .Colon, |
| 1354 | .Semicolon, |
| 1355 | .Slash, |
| 1356 | .SlashEqual, |
| 1357 | .Nl, |
| 1358 | .Comma, |
| 1359 | .Ampersand, |
| 1360 | .AmpersandAmpersand, |
| 1361 | .AmpersandEqual, |
| 1362 | .QuestionMark, |
| 1363 | .AngleBracketLeft, |
| 1364 | .AngleBracketLeftEqual, |
| 1365 | .AngleBracketAngleBracketLeft, |
| 1366 | .Nl, |
| 1367 | .AngleBracketAngleBracketLeftEqual, |
| 1368 | .AngleBracketRight, |
| 1369 | .AngleBracketRightEqual, |
| 1370 | .AngleBracketAngleBracketRight, |
| 1371 | .AngleBracketAngleBracketRightEqual, |
| 1372 | .Tilde, |
| 1373 | .Hash, |
| 1374 | .HashHash, |
| 1375 | .Nl, |
| 1376 | }); |
| 1371 | 1377 | } |
| 1372 | 1378 | |
| 1373 | 1379 | test "keywords" { |
| ... | ... | @@ -1388,6 +1394,7 @@ test "keywords" { |
| 1388 | 1394 | .Keyword_continue, |
| 1389 | 1395 | .Keyword_default, |
| 1390 | 1396 | .Keyword_do, |
| 1397 | .Nl, |
| 1391 | 1398 | .Keyword_double, |
| 1392 | 1399 | .Keyword_else, |
| 1393 | 1400 | .Keyword_enum, |
| ... | ... | @@ -1397,6 +1404,7 @@ test "keywords" { |
| 1397 | 1404 | .Keyword_goto, |
| 1398 | 1405 | .Keyword_if, |
| 1399 | 1406 | .Keyword_int, |
| 1407 | .Nl, |
| 1400 | 1408 | .Keyword_long, |
| 1401 | 1409 | .Keyword_register, |
| 1402 | 1410 | .Keyword_return, |
| ... | ... | @@ -1404,6 +1412,7 @@ test "keywords" { |
| 1404 | 1412 | .Keyword_signed, |
| 1405 | 1413 | .Keyword_sizeof, |
| 1406 | 1414 | .Keyword_static, |
| 1415 | .Nl, |
| 1407 | 1416 | .Keyword_struct, |
| 1408 | 1417 | .Keyword_switch, |
| 1409 | 1418 | .Keyword_typedef, |
| ... | ... | @@ -1411,6 +1420,7 @@ test "keywords" { |
| 1411 | 1420 | .Keyword_unsigned, |
| 1412 | 1421 | .Keyword_void, |
| 1413 | 1422 | .Keyword_volatile, |
| 1423 | .Nl, |
| 1414 | 1424 | .Keyword_while, |
| 1415 | 1425 | .Keyword_bool, |
| 1416 | 1426 | .Keyword_complex, |
| ... | ... | @@ -1418,12 +1428,14 @@ test "keywords" { |
| 1418 | 1428 | .Keyword_inline, |
| 1419 | 1429 | .Keyword_restrict, |
| 1420 | 1430 | .Keyword_alignas, |
| 1431 | .Nl, |
| 1421 | 1432 | .Keyword_alignof, |
| 1422 | 1433 | .Keyword_atomic, |
| 1423 | 1434 | .Keyword_generic, |
| 1424 | 1435 | .Keyword_noreturn, |
| 1425 | 1436 | .Keyword_static_assert, |
| 1426 | 1437 | .Keyword_thread_local, |
| 1438 | .Nl, |
| 1427 | 1439 | }); |
| 1428 | 1440 | } |
| 1429 | 1441 | |
| ... | ... | @@ -1469,7 +1481,10 @@ test "line continuation" { |
| 1469 | 1481 | \\ bar |
| 1470 | 1482 | \\"foo\ |
| 1471 | 1483 | \\ bar" |
| 1472 | | \\ |
| 1484 | \\#define "foo" |
| 1485 | \\ "bar" |
| 1486 | \\#define "foo" \ |
| 1487 | \\ "bar" |
| 1473 | 1488 | , &[_]Token.Id{ |
| 1474 | 1489 | .Hash, |
| 1475 | 1490 | .Keyword_define, |
| ... | ... | @@ -1477,6 +1492,14 @@ test "line continuation" { |
| 1477 | 1492 | .Identifier, |
| 1478 | 1493 | .Nl, |
| 1479 | 1494 | .{ .StringLiteral = .None }, |
| 1495 | .Hash, |
| 1496 | .Keyword_define, |
| 1497 | .{ .StringLiteral = .None }, |
| 1498 | .Nl, |
| 1499 | .{ .StringLiteral = .None }, |
| 1500 | .Hash, |
| 1501 | .Keyword_define, |
| 1502 | .{ .StringLiteral = .None }, |
| 1480 | 1503 | }); |
| 1481 | 1504 | } |
| 1482 | 1505 | |
| ... | ... | @@ -1499,9 +1522,13 @@ test "string prefix" { |
| 1499 | 1522 | .{ .StringLiteral = .Utf32 }, |
| 1500 | 1523 | .{ .StringLiteral = .Wide }, |
| 1501 | 1524 | .{ .CharLiteral = .None }, |
| 1525 | .Nl, |
| 1502 | 1526 | .{ .CharLiteral = .Utf16 }, |
| 1527 | .Nl, |
| 1503 | 1528 | .{ .CharLiteral = .Utf32 }, |
| 1529 | .Nl, |
| 1504 | 1530 | .{ .CharLiteral = .Wide }, |
| 1531 | .Nl, |
| 1505 | 1532 | }); |
| 1506 | 1533 | } |
| 1507 | 1534 | |
| ... | ... | @@ -1517,15 +1544,18 @@ test "num suffixes" { |
| 1517 | 1544 | .{ .FloatLiteral = .None }, |
| 1518 | 1545 | .{ .FloatLiteral = .None }, |
| 1519 | 1546 | .{ .FloatLiteral = .None }, |
| 1547 | .Nl, |
| 1520 | 1548 | .{ .IntegerLiteral = .L }, |
| 1521 | 1549 | .{ .IntegerLiteral = .LU }, |
| 1522 | 1550 | .{ .IntegerLiteral = .LL }, |
| 1523 | 1551 | .{ .IntegerLiteral = .LLU }, |
| 1524 | 1552 | .{ .IntegerLiteral = .None }, |
| 1553 | .Nl, |
| 1525 | 1554 | .{ .IntegerLiteral = .U }, |
| 1526 | 1555 | .{ .IntegerLiteral = .LU }, |
| 1527 | 1556 | .{ .IntegerLiteral = .LLU }, |
| 1528 | 1557 | .{ .IntegerLiteral = .None }, |
| 1558 | .Nl, |
| 1529 | 1559 | }); |
| 1530 | 1560 | } |
| 1531 | 1561 | |