aboutsummaryrefslogtreecommitdiff
path: root/src/js_lexer_tables.zig
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <jarred@jarredsumner.com> 2021-04-18 15:24:24 -0700
committerGravatar Jarred Sumner <jarred@jarredsumner.com> 2021-04-18 15:24:24 -0700
commit41367499de215d8125310118ef82737c9aca8a57 (patch)
treeb0961c395e9228220a474e1385056c30f501ac17 /src/js_lexer_tables.zig
parent025fe36defe2468ca1ed224855aa1effa09001ca (diff)
downloadbun-41367499de215d8125310118ef82737c9aca8a57.tar.gz
bun-41367499de215d8125310118ef82737c9aca8a57.tar.zst
bun-41367499de215d8125310118ef82737c9aca8a57.zip
wip wip
Diffstat (limited to 'src/js_lexer_tables.zig')
-rw-r--r--src/js_lexer_tables.zig714
1 files changed, 714 insertions, 0 deletions
diff --git a/src/js_lexer_tables.zig b/src/js_lexer_tables.zig
new file mode 100644
index 000000000..916323f4f
--- /dev/null
+++ b/src/js_lexer_tables.zig
@@ -0,0 +1,714 @@
+const std = @import("std");
+const expectString = std.testing.expectEqualStrings;
+const expect = std.testing.expect;
+const logger = @import("logger.zig");
+const unicode = std.unicode;
+const alloc = @import("alloc.zig");
+
+pub const T = enum(u8) {
+ t_end_of_file,
+ t_syntax_error,
+
+ // "#!/usr/bin/env node"
+ t_hashbang,
+
+ // literals
+ t_no_substitution_template_literal, // contents are in lexer.string_literal ([]uint16)
+ t_numeric_literal, // contents are in lexer.number (float64)
+ t_string_literal, // contents are in lexer.string_literal ([]uint16)
+ t_big_integer_literal, // contents are in lexer.identifier (string)
+
+ // pseudo-literals
+ t_template_head, // contents are in lexer.string_literal ([]uint16)
+ t_template_middle, // contents are in lexer.string_literal ([]uint16)
+ t_template_tail, // contents are in lexer.string_literal ([]uint16)
+
+ // punctuation
+ t_ampersand,
+ t_ampersand_ampersand,
+ t_asterisk,
+ t_asterisk_asterisk,
+ t_at,
+ t_bar,
+ t_bar_bar,
+ t_caret,
+ t_close_brace,
+ t_close_bracket,
+ t_close_paren,
+ t_colon,
+ t_comma,
+ t_dot,
+ t_dot_dot_dot,
+ t_equals_equals,
+ t_equals_equals_equals,
+ t_equals_greater_than,
+ t_exclamation,
+ t_exclamation_equals,
+ t_exclamation_equals_equals,
+ t_greater_than,
+ t_greater_than_equals,
+ t_greater_than_greater_than,
+ t_greater_than_greater_than_greater_than,
+ t_less_than,
+ t_less_than_equals,
+ t_less_than_less_than,
+ t_minus,
+ t_minus_minus,
+ t_open_brace,
+ t_open_bracket,
+ t_open_paren,
+ t_percent,
+ t_plus,
+ t_plus_plus,
+ t_question,
+ t_question_dot,
+ t_question_question,
+ t_semicolon,
+ t_slash,
+ t_tilde,
+
+ // assignments (keep in sync with is_assign() below)
+ t_ampersand_ampersand_equals,
+ t_ampersand_equals,
+ t_asterisk_asterisk_equals,
+ t_asterisk_equals,
+ t_bar_bar_equals,
+ t_bar_equals,
+ t_caret_equals,
+ t_equals,
+ t_greater_than_greater_than_equals,
+ t_greater_than_greater_than_greater_than_equals,
+ t_less_than_less_than_equals,
+ t_minus_equals,
+ t_percent_equals,
+ t_plus_equals,
+ t_question_question_equals,
+ t_slash_equals,
+
+ // class-private fields and methods
+ t_private_identifier,
+
+ // identifiers
+ t_identifier, // contents are in lexer.identifier (string)
+ t_escaped_keyword, // a keyword that has been escaped as an identifer
+
+ // reserved words
+ t_break,
+ t_case,
+ t_catch,
+ t_class,
+ t_const,
+ t_continue,
+ t_debugger,
+ t_default,
+ t_delete,
+ t_do,
+ t_else,
+ t_enum,
+ t_export,
+ t_extends,
+ t_false,
+ t_finally,
+ t_for,
+ t_function,
+ t_if,
+ t_import,
+ t_in,
+ t_instanceof,
+ t_new,
+ t_null,
+ t_return,
+ t_super,
+ t_switch,
+ t_this,
+ t_throw,
+ t_true,
+ t_try,
+ t_typeof,
+ t_var,
+ t_void,
+ t_while,
+ t_with,
+
+ pub fn isAssign() bool {
+ return self >= T.t_ampersand_ampersand_equals and self <= T.t_slash_equals;
+ }
+
+ pub fn isReservedWord() bool {
+ return self >= T.t_break and self <= T.t_with;
+ }
+};
+
+pub const Keywords = std.ComptimeStringMap(T, .{
+ .{ "break", .t_break },
+ .{ "case", .t_case },
+ .{ "catch", .t_catch },
+ .{ "class", .t_class },
+ .{ "const", .t_const },
+ .{ "continue", .t_continue },
+ .{ "debugger", .t_debugger },
+ .{ "default", .t_default },
+ .{ "delete", .t_delete },
+ .{ "do", .t_do },
+ .{ "else", .t_else },
+ .{ "enum", .t_enum },
+ .{ "export", .t_export },
+ .{ "extends", .t_extends },
+ .{ "false", .t_false },
+ .{ "finally", .t_finally },
+ .{ "for", .t_for },
+ .{ "function", .t_function },
+ .{ "if", .t_if },
+ .{ "import", .t_import },
+ .{ "in", .t_in },
+ .{ "instanceof", .t_instanceof },
+ .{ "new", .t_new },
+ .{ "null", .t_null },
+ .{ "return", .t_return },
+ .{ "super", .t_super },
+ .{ "switch", .t_switch },
+ .{ "this", .t_this },
+ .{ "throw", .t_throw },
+ .{ "true", .t_true },
+ .{ "try", .t_try },
+ .{ "typeof", .t_typeof },
+ .{ "var", .t_var },
+ .{ "void", .t_void },
+ .{ "while", .t_while },
+ .{ "with", .t_with },
+});
+
+pub const CodePoint = u21;
+
+pub const TokenEnumType = std.EnumArray(T, []u8);
+
+pub const tokenToString: TokenEnumType = comptime {
+ var TEndOfFile = "end of file".*;
+ var TSyntaxError = "syntax error".*;
+ var THashbang = "hashbang comment".*;
+
+ // Literals
+ var TNoSubstitutionTemplateLiteral = "template literal".*;
+ var TNumericLiteral = "number".*;
+ var TStringLiteral = "string".*;
+ var TBigIntegerLiteral = "bigint".*;
+
+ // Pseudo-literals
+ var TTemplateHead = "template literal".*;
+ var TTemplateMiddle = "template literal".*;
+ var TTemplateTail = "template literal".*;
+
+ // Punctuation
+ var TAmpersand = "\"&\"".*;
+ var TAmpersandAmpersand = "\"&&\"".*;
+ var TAsterisk = "\"*\"".*;
+ var TAsteriskAsterisk = "\"**\"".*;
+ var TAt = "\"@\"".*;
+ var TBar = "\"|\"".*;
+ var TBarBar = "\"||\"".*;
+ var TCaret = "\"^\"".*;
+ var TCloseBrace = "\"}\"".*;
+ var TCloseBracket = "\"]\"".*;
+ var TCloseParen = "\")\"".*;
+ var TColon = "\" =\"".*;
+ var TComma = "\",\"".*;
+ var TDot = "\".\"".*;
+ var TDotDotDot = "\"...\"".*;
+ var TEqualsEquals = "\"==\"".*;
+ var TEqualsEqualsEquals = "\"===\"".*;
+ var TEqualsGreaterThan = "\"=>\"".*;
+ var TExclamation = "\"!\"".*;
+ var TExclamationEquals = "\"!=\"".*;
+ var TExclamationEqualsEquals = "\"!==\"".*;
+ var TGreaterThan = "\">\"".*;
+ var TGreaterThanEquals = "\">=\"".*;
+ var TGreaterThanGreaterThan = "\">>\"".*;
+ var TGreaterThanGreaterThanGreaterThan = "\">>>\"".*;
+ var TLessThan = "\"<\"".*;
+ var TLessThanEquals = "\"<=\"".*;
+ var TLessThanLessThan = "\"<<\"".*;
+ var TMinus = "\"-\"".*;
+ var TMinusMinus = "\"--\"".*;
+ var TOpenBrace = "\"{\"".*;
+ var TOpenBracket = "\"[\"".*;
+ var TOpenParen = "\"(\"".*;
+ var TPercent = "\"%\"".*;
+ var TPlus = "\"+\"".*;
+ var TPlusPlus = "\"++\"".*;
+ var TQuestion = "\"?\"".*;
+ var TQuestionDot = "\"?.\"".*;
+ var TQuestionQuestion = "\"??\"".*;
+ var TSemicolon = "\";\"".*;
+ var TSlash = "\"/\"".*;
+ var TTilde = "\"~\"".*;
+
+ // Assignments
+ var TAmpersandAmpersandEquals = "\"&&=\"".*;
+ var TAmpersandEquals = "\"&=\"".*;
+ var TAsteriskAsteriskEquals = "\"**=\"".*;
+ var TAsteriskEquals = "\"*=\"".*;
+ var TBarBarEquals = "\"||=\"".*;
+ var TBarEquals = "\"|=\"".*;
+ var TCaretEquals = "\"^=\"".*;
+ var TEquals = "\"=\"".*;
+ var TGreaterThanGreaterThanEquals = "\">>=\"".*;
+ var TGreaterThanGreaterThanGreaterThanEquals = "\">>>=\"".*;
+ var TLessThanLessThanEquals = "\"<<=\"".*;
+ var TMinusEquals = "\"-=\"".*;
+ var TPercentEquals = "\"%=\"".*;
+ var TPlusEquals = "\"+=\"".*;
+ var TQuestionQuestionEquals = "\"??=\"".*;
+ var TSlashEquals = "\"/=\"".*;
+
+ // Class-private fields and methods
+ var TPrivateIdentifier = "private identifier".*;
+
+ // Identifiers
+ var TIdentifier = "identifier".*;
+ var TEscapedKeyword = "escaped keyword".*;
+
+ // Reserved words
+ var TBreak = "\"break\"".*;
+ var TCase = "\"case\"".*;
+ var TCatch = "\"catch\"".*;
+ var TClass = "\"class\"".*;
+ var TConst = "\"const\"".*;
+ var TContinue = "\"continue\"".*;
+ var TDebugger = "\"debugger\"".*;
+ var TDefault = "\"default\"".*;
+ var TDelete = "\"delete\"".*;
+ var TDo = "\"do\"".*;
+ var TElse = "\"else\"".*;
+ var TEnum = "\"enum\"".*;
+ var TExport = "\"export\"".*;
+ var TExtends = "\"extends\"".*;
+ var TFalse = "\"false\"".*;
+ var TFinally = "\"finally\"".*;
+ var TFor = "\"for\"".*;
+ var TFunction = "\"function\"".*;
+ var TIf = "\"if\"".*;
+ var TImport = "\"import\"".*;
+ var TIn = "\"in\"".*;
+ var TInstanceof = "\"instanceof\"".*;
+ var TNew = "\"new\"".*;
+ var TNull = "\"null\"".*;
+ var TReturn = "\"return\"".*;
+ var TSuper = "\"super\"".*;
+ var TSwitch = "\"switch\"".*;
+ var TThis = "\"this\"".*;
+ var TThrow = "\"throw\"".*;
+ var TTrue = "\"true\"".*;
+ var TTry = "\"try\"".*;
+ var TTypeof = "\"typeof\"".*;
+ var TVar = "\"var\"".*;
+ var TVoid = "\"void\"".*;
+ var TWhile = "\"while\"".*;
+ var TWith = "\"with\"".*;
+
+ var tokenEnums = TokenEnumType.initUndefined();
+
+ var eof = "end of file";
+
+ tokenEnums.set(T.t_end_of_file, &TEndOfFile);
+ tokenEnums.set(T.t_syntax_error, &TSyntaxError);
+ tokenEnums.set(T.t_hashbang, &THashbang);
+
+ // Literals
+ tokenEnums.set(T.t_no_substitution_template_literal, &TNoSubstitutionTemplateLiteral);
+ tokenEnums.set(T.t_numeric_literal, &TNumericLiteral);
+ tokenEnums.set(T.t_string_literal, &TStringLiteral);
+ tokenEnums.set(T.t_big_integer_literal, &TBigIntegerLiteral);
+
+ // Pseudo-literals
+ tokenEnums.set(T.t_template_head, &TTemplateHead);
+ tokenEnums.set(T.t_template_middle, &TTemplateMiddle);
+ tokenEnums.set(T.t_template_tail, &TTemplateTail);
+
+ // Punctuation
+ tokenEnums.set(T.t_ampersand, &TAmpersand);
+ tokenEnums.set(T.t_ampersand_ampersand, &TAmpersandAmpersand);
+ tokenEnums.set(T.t_asterisk, &TAsterisk);
+ tokenEnums.set(T.t_asterisk_asterisk, &TAsteriskAsterisk);
+ tokenEnums.set(T.t_at, &TAt);
+ tokenEnums.set(T.t_bar, &TBar);
+ tokenEnums.set(T.t_bar_bar, &TBarBar);
+ tokenEnums.set(T.t_caret, &TCaret);
+ tokenEnums.set(T.t_close_brace, &TCloseBrace);
+ tokenEnums.set(T.t_close_bracket, &TCloseBracket);
+ tokenEnums.set(T.t_close_paren, &TCloseParen);
+ tokenEnums.set(T.t_colon, &TColon);
+ tokenEnums.set(T.t_comma, &TComma);
+ tokenEnums.set(T.t_dot, &TDot);
+ tokenEnums.set(T.t_dot_dot_dot, &TDotDotDot);
+ tokenEnums.set(T.t_equals_equals, &TEqualsEquals);
+ tokenEnums.set(T.t_equals_equals_equals, &TEqualsEqualsEquals);
+ tokenEnums.set(T.t_equals_greater_than, &TEqualsGreaterThan);
+ tokenEnums.set(T.t_exclamation, &TExclamation);
+ tokenEnums.set(T.t_exclamation_equals, &TExclamationEquals);
+ tokenEnums.set(T.t_exclamation_equals_equals, &TExclamationEqualsEquals);
+ tokenEnums.set(T.t_greater_than, &TGreaterThan);
+ tokenEnums.set(T.t_greater_than_equals, &TGreaterThanEquals);
+ tokenEnums.set(T.t_greater_than_greater_than, &TGreaterThanGreaterThan);
+ tokenEnums.set(T.t_greater_than_greater_than_greater_than, &TGreaterThanGreaterThanGreaterThan);
+ tokenEnums.set(T.t_less_than, &TLessThan);
+ tokenEnums.set(T.t_less_than_equals, &TLessThanEquals);
+ tokenEnums.set(T.t_less_than_less_than, &TLessThanLessThan);
+ tokenEnums.set(T.t_minus, &TMinus);
+ tokenEnums.set(T.t_minus_minus, &TMinusMinus);
+ tokenEnums.set(T.t_open_brace, &TOpenBrace);
+ tokenEnums.set(T.t_open_bracket, &TOpenBracket);
+ tokenEnums.set(T.t_open_paren, &TOpenParen);
+ tokenEnums.set(T.t_percent, &TPercent);
+ tokenEnums.set(T.t_plus, &TPlus);
+ tokenEnums.set(T.t_plus_plus, &TPlusPlus);
+ tokenEnums.set(T.t_question, &TQuestion);
+ tokenEnums.set(T.t_question_dot, &TQuestionDot);
+ tokenEnums.set(T.t_question_question, &TQuestionQuestion);
+ tokenEnums.set(T.t_semicolon, &TSemicolon);
+ tokenEnums.set(T.t_slash, &TSlash);
+ tokenEnums.set(T.t_tilde, &TTilde);
+
+ // Assignments
+ tokenEnums.set(T.t_ampersand_ampersand_equals, &TAmpersandAmpersandEquals);
+ tokenEnums.set(T.t_ampersand_equals, &TAmpersandEquals);
+ tokenEnums.set(T.t_asterisk_asterisk_equals, &TAsteriskAsteriskEquals);
+ tokenEnums.set(T.t_asterisk_equals, &TAsteriskEquals);
+ tokenEnums.set(T.t_bar_bar_equals, &TBarBarEquals);
+ tokenEnums.set(T.t_bar_equals, &TBarEquals);
+ tokenEnums.set(T.t_caret_equals, &TCaretEquals);
+ tokenEnums.set(T.t_equals, &TEquals);
+ tokenEnums.set(T.t_greater_than_greater_than_equals, &TGreaterThanGreaterThanEquals);
+ tokenEnums.set(T.t_greater_than_greater_than_greater_than_equals, &TGreaterThanGreaterThanGreaterThanEquals);
+ tokenEnums.set(T.t_less_than_less_than_equals, &TLessThanLessThanEquals);
+ tokenEnums.set(T.t_minus_equals, &TMinusEquals);
+ tokenEnums.set(T.t_percent_equals, &TPercentEquals);
+ tokenEnums.set(T.t_plus_equals, &TPlusEquals);
+ tokenEnums.set(T.t_question_question_equals, &TQuestionQuestionEquals);
+ tokenEnums.set(T.t_slash_equals, &TSlashEquals);
+
+ // Class-private fields and methods
+ tokenEnums.set(T.t_private_identifier, &TPrivateIdentifier);
+
+ // Identifiers
+ tokenEnums.set(T.t_identifier, &TIdentifier);
+ tokenEnums.set(T.t_escaped_keyword, &TEscapedKeyword);
+
+ // Reserved words
+ tokenEnums.set(T.t_break, &TBreak);
+ tokenEnums.set(T.t_case, &TCase);
+ tokenEnums.set(T.t_catch, &TCatch);
+ tokenEnums.set(T.t_class, &TClass);
+ tokenEnums.set(T.t_const, &TConst);
+ tokenEnums.set(T.t_continue, &TContinue);
+ tokenEnums.set(T.t_debugger, &TDebugger);
+ tokenEnums.set(T.t_default, &TDefault);
+ tokenEnums.set(T.t_delete, &TDelete);
+ tokenEnums.set(T.t_do, &TDo);
+ tokenEnums.set(T.t_else, &TElse);
+ tokenEnums.set(T.t_enum, &TEnum);
+ tokenEnums.set(T.t_export, &TExport);
+ tokenEnums.set(T.t_extends, &TExtends);
+ tokenEnums.set(T.t_false, &TFalse);
+ tokenEnums.set(T.t_finally, &TFinally);
+ tokenEnums.set(T.t_for, &TFor);
+ tokenEnums.set(T.t_function, &TFunction);
+ tokenEnums.set(T.t_if, &TIf);
+ tokenEnums.set(T.t_import, &TImport);
+ tokenEnums.set(T.t_in, &TIn);
+ tokenEnums.set(T.t_instanceof, &TInstanceof);
+ tokenEnums.set(T.t_new, &TNew);
+ tokenEnums.set(T.t_null, &TNull);
+ tokenEnums.set(T.t_return, &TReturn);
+ tokenEnums.set(T.t_super, &TSuper);
+ tokenEnums.set(T.t_switch, &TSwitch);
+ tokenEnums.set(T.t_this, &TThis);
+ tokenEnums.set(T.t_throw, &TThrow);
+ tokenEnums.set(T.t_true, &TTrue);
+ tokenEnums.set(T.t_try, &TTry);
+ tokenEnums.set(T.t_typeof, &TTypeof);
+ tokenEnums.set(T.t_var, &TVar);
+ tokenEnums.set(T.t_void, &TVoid);
+ tokenEnums.set(T.t_while, &TWhile);
+ tokenEnums.set(T.t_with, &TWith);
+
+ return tokenEnums;
+};
+
+pub const JSXEntityMap = std.StringHashMap(CodePoint);
+
+pub var jsxEntity: JSXEntityMap = undefined;
+
+pub fn initJSXEntityMap() !void {
+ jsxEntity = JSXEntityMap.init(alloc.dynamic);
+ jsxEntity.ensureCapacity(255) catch unreachable;
+
+ jsxEntity.putAssumeCapacity("quot", @as(CodePoint, 0x0022));
+ jsxEntity.putAssumeCapacity("amp", @as(CodePoint, 0x0026));
+ jsxEntity.putAssumeCapacity("apos", @as(CodePoint, 0x0027));
+ jsxEntity.putAssumeCapacity("lt", @as(CodePoint, 0x003C));
+ jsxEntity.putAssumeCapacity("gt", @as(CodePoint, 0x003E));
+ jsxEntity.putAssumeCapacity("nbsp", @as(CodePoint, 0x00A0));
+ jsxEntity.putAssumeCapacity("iexcl", @as(CodePoint, 0x00A1));
+ jsxEntity.putAssumeCapacity("cent", @as(CodePoint, 0x00A2));
+ jsxEntity.putAssumeCapacity("pound", @as(CodePoint, 0x00A3));
+ jsxEntity.putAssumeCapacity("curren", @as(CodePoint, 0x00A4));
+ jsxEntity.putAssumeCapacity("yen", @as(CodePoint, 0x00A5));
+ jsxEntity.putAssumeCapacity("brvbar", @as(CodePoint, 0x00A6));
+ jsxEntity.putAssumeCapacity("sect", @as(CodePoint, 0x00A7));
+ jsxEntity.putAssumeCapacity("uml", @as(CodePoint, 0x00A8));
+ jsxEntity.putAssumeCapacity("copy", @as(CodePoint, 0x00A9));
+ jsxEntity.putAssumeCapacity("ordf", @as(CodePoint, 0x00AA));
+ jsxEntity.putAssumeCapacity("laquo", @as(CodePoint, 0x00AB));
+ jsxEntity.putAssumeCapacity("not", @as(CodePoint, 0x00AC));
+ jsxEntity.putAssumeCapacity("shy", @as(CodePoint, 0x00AD));
+ jsxEntity.putAssumeCapacity("reg", @as(CodePoint, 0x00AE));
+ jsxEntity.putAssumeCapacity("macr", @as(CodePoint, 0x00AF));
+ jsxEntity.putAssumeCapacity("deg", @as(CodePoint, 0x00B0));
+ jsxEntity.putAssumeCapacity("plusmn", @as(CodePoint, 0x00B1));
+ jsxEntity.putAssumeCapacity("sup2", @as(CodePoint, 0x00B2));
+ jsxEntity.putAssumeCapacity("sup3", @as(CodePoint, 0x00B3));
+ jsxEntity.putAssumeCapacity("acute", @as(CodePoint, 0x00B4));
+ jsxEntity.putAssumeCapacity("micro", @as(CodePoint, 0x00B5));
+ jsxEntity.putAssumeCapacity("para", @as(CodePoint, 0x00B6));
+ jsxEntity.putAssumeCapacity("middot", @as(CodePoint, 0x00B7));
+ jsxEntity.putAssumeCapacity("cedil", @as(CodePoint, 0x00B8));
+ jsxEntity.putAssumeCapacity("sup1", @as(CodePoint, 0x00B9));
+ jsxEntity.putAssumeCapacity("ordm", @as(CodePoint, 0x00BA));
+ jsxEntity.putAssumeCapacity("raquo", @as(CodePoint, 0x00BB));
+ jsxEntity.putAssumeCapacity("frac14", @as(CodePoint, 0x00BC));
+ jsxEntity.putAssumeCapacity("frac12", @as(CodePoint, 0x00BD));
+ jsxEntity.putAssumeCapacity("frac34", @as(CodePoint, 0x00BE));
+ jsxEntity.putAssumeCapacity("iquest", @as(CodePoint, 0x00BF));
+ jsxEntity.putAssumeCapacity("Agrave", @as(CodePoint, 0x00C0));
+ jsxEntity.putAssumeCapacity("Aacute", @as(CodePoint, 0x00C1));
+ jsxEntity.putAssumeCapacity("Acirc", @as(CodePoint, 0x00C2));
+ jsxEntity.putAssumeCapacity("Atilde", @as(CodePoint, 0x00C3));
+ jsxEntity.putAssumeCapacity("Auml", @as(CodePoint, 0x00C4));
+ jsxEntity.putAssumeCapacity("Aring", @as(CodePoint, 0x00C5));
+ jsxEntity.putAssumeCapacity("AElig", @as(CodePoint, 0x00C6));
+ jsxEntity.putAssumeCapacity("Ccedil", @as(CodePoint, 0x00C7));
+ jsxEntity.putAssumeCapacity("Egrave", @as(CodePoint, 0x00C8));
+ jsxEntity.putAssumeCapacity("Eacute", @as(CodePoint, 0x00C9));
+ jsxEntity.putAssumeCapacity("Ecirc", @as(CodePoint, 0x00CA));
+ jsxEntity.putAssumeCapacity("Euml", @as(CodePoint, 0x00CB));
+ jsxEntity.putAssumeCapacity("Igrave", @as(CodePoint, 0x00CC));
+ jsxEntity.putAssumeCapacity("Iacute", @as(CodePoint, 0x00CD));
+ jsxEntity.putAssumeCapacity("Icirc", @as(CodePoint, 0x00CE));
+ jsxEntity.putAssumeCapacity("Iuml", @as(CodePoint, 0x00CF));
+ jsxEntity.putAssumeCapacity("ETH", @as(CodePoint, 0x00D0));
+ jsxEntity.putAssumeCapacity("Ntilde", @as(CodePoint, 0x00D1));
+ jsxEntity.putAssumeCapacity("Ograve", @as(CodePoint, 0x00D2));
+ jsxEntity.putAssumeCapacity("Oacute", @as(CodePoint, 0x00D3));
+ jsxEntity.putAssumeCapacity("Ocirc", @as(CodePoint, 0x00D4));
+ jsxEntity.putAssumeCapacity("Otilde", @as(CodePoint, 0x00D5));
+ jsxEntity.putAssumeCapacity("Ouml", @as(CodePoint, 0x00D6));
+ jsxEntity.putAssumeCapacity("times", @as(CodePoint, 0x00D7));
+ jsxEntity.putAssumeCapacity("Oslash", @as(CodePoint, 0x00D8));
+ jsxEntity.putAssumeCapacity("Ugrave", @as(CodePoint, 0x00D9));
+ jsxEntity.putAssumeCapacity("Uacute", @as(CodePoint, 0x00DA));
+ jsxEntity.putAssumeCapacity("Ucirc", @as(CodePoint, 0x00DB));
+ jsxEntity.putAssumeCapacity("Uuml", @as(CodePoint, 0x00DC));
+ jsxEntity.putAssumeCapacity("Yacute", @as(CodePoint, 0x00DD));
+ jsxEntity.putAssumeCapacity("THORN", @as(CodePoint, 0x00DE));
+ jsxEntity.putAssumeCapacity("szlig", @as(CodePoint, 0x00DF));
+ jsxEntity.putAssumeCapacity("agrave", @as(CodePoint, 0x00E0));
+ jsxEntity.putAssumeCapacity("aacute", @as(CodePoint, 0x00E1));
+ jsxEntity.putAssumeCapacity("acirc", @as(CodePoint, 0x00E2));
+ jsxEntity.putAssumeCapacity("atilde", @as(CodePoint, 0x00E3));
+ jsxEntity.putAssumeCapacity("auml", @as(CodePoint, 0x00E4));
+ jsxEntity.putAssumeCapacity("aring", @as(CodePoint, 0x00E5));
+ jsxEntity.putAssumeCapacity("aelig", @as(CodePoint, 0x00E6));
+ jsxEntity.putAssumeCapacity("ccedil", @as(CodePoint, 0x00E7));
+ jsxEntity.putAssumeCapacity("egrave", @as(CodePoint, 0x00E8));
+ jsxEntity.putAssumeCapacity("eacute", @as(CodePoint, 0x00E9));
+ jsxEntity.putAssumeCapacity("ecirc", @as(CodePoint, 0x00EA));
+ jsxEntity.putAssumeCapacity("euml", @as(CodePoint, 0x00EB));
+ jsxEntity.putAssumeCapacity("igrave", @as(CodePoint, 0x00EC));
+ jsxEntity.putAssumeCapacity("iacute", @as(CodePoint, 0x00ED));
+ jsxEntity.putAssumeCapacity("icirc", @as(CodePoint, 0x00EE));
+ jsxEntity.putAssumeCapacity("iuml", @as(CodePoint, 0x00EF));
+ jsxEntity.putAssumeCapacity("eth", @as(CodePoint, 0x00F0));
+ jsxEntity.putAssumeCapacity("ntilde", @as(CodePoint, 0x00F1));
+ jsxEntity.putAssumeCapacity("ograve", @as(CodePoint, 0x00F2));
+ jsxEntity.putAssumeCapacity("oacute", @as(CodePoint, 0x00F3));
+ jsxEntity.putAssumeCapacity("ocirc", @as(CodePoint, 0x00F4));
+ jsxEntity.putAssumeCapacity("otilde", @as(CodePoint, 0x00F5));
+ jsxEntity.putAssumeCapacity("ouml", @as(CodePoint, 0x00F6));
+ jsxEntity.putAssumeCapacity("divide", @as(CodePoint, 0x00F7));
+ jsxEntity.putAssumeCapacity("oslash", @as(CodePoint, 0x00F8));
+ jsxEntity.putAssumeCapacity("ugrave", @as(CodePoint, 0x00F9));
+ jsxEntity.putAssumeCapacity("uacute", @as(CodePoint, 0x00FA));
+ jsxEntity.putAssumeCapacity("ucirc", @as(CodePoint, 0x00FB));
+ jsxEntity.putAssumeCapacity("uuml", @as(CodePoint, 0x00FC));
+ jsxEntity.putAssumeCapacity("yacute", @as(CodePoint, 0x00FD));
+ jsxEntity.putAssumeCapacity("thorn", @as(CodePoint, 0x00FE));
+ jsxEntity.putAssumeCapacity("yuml", @as(CodePoint, 0x00FF));
+ jsxEntity.putAssumeCapacity("OElig", @as(CodePoint, 0x0152));
+ jsxEntity.putAssumeCapacity("oelig", @as(CodePoint, 0x0153));
+ jsxEntity.putAssumeCapacity("Scaron", @as(CodePoint, 0x0160));
+ jsxEntity.putAssumeCapacity("scaron", @as(CodePoint, 0x0161));
+ jsxEntity.putAssumeCapacity("Yuml", @as(CodePoint, 0x0178));
+ jsxEntity.putAssumeCapacity("fnof", @as(CodePoint, 0x0192));
+ jsxEntity.putAssumeCapacity("circ", @as(CodePoint, 0x02C6));
+ jsxEntity.putAssumeCapacity("tilde", @as(CodePoint, 0x02DC));
+ jsxEntity.putAssumeCapacity("Alpha", @as(CodePoint, 0x0391));
+ jsxEntity.putAssumeCapacity("Beta", @as(CodePoint, 0x0392));
+ jsxEntity.putAssumeCapacity("Gamma", @as(CodePoint, 0x0393));
+ jsxEntity.putAssumeCapacity("Delta", @as(CodePoint, 0x0394));
+ jsxEntity.putAssumeCapacity("Epsilon", @as(CodePoint, 0x0395));
+ jsxEntity.putAssumeCapacity("Zeta", @as(CodePoint, 0x0396));
+ jsxEntity.putAssumeCapacity("Eta", @as(CodePoint, 0x0397));
+ jsxEntity.putAssumeCapacity("Theta", @as(CodePoint, 0x0398));
+ jsxEntity.putAssumeCapacity("Iota", @as(CodePoint, 0x0399));
+ jsxEntity.putAssumeCapacity("Kappa", @as(CodePoint, 0x039A));
+ jsxEntity.putAssumeCapacity("Lambda", @as(CodePoint, 0x039B));
+ jsxEntity.putAssumeCapacity("Mu", @as(CodePoint, 0x039C));
+ jsxEntity.putAssumeCapacity("Nu", @as(CodePoint, 0x039D));
+ jsxEntity.putAssumeCapacity("Xi", @as(CodePoint, 0x039E));
+ jsxEntity.putAssumeCapacity("Omicron", @as(CodePoint, 0x039F));
+ jsxEntity.putAssumeCapacity("Pi", @as(CodePoint, 0x03A0));
+ jsxEntity.putAssumeCapacity("Rho", @as(CodePoint, 0x03A1));
+ jsxEntity.putAssumeCapacity("Sigma", @as(CodePoint, 0x03A3));
+ jsxEntity.putAssumeCapacity("Tau", @as(CodePoint, 0x03A4));
+ jsxEntity.putAssumeCapacity("Upsilon", @as(CodePoint, 0x03A5));
+ jsxEntity.putAssumeCapacity("Phi", @as(CodePoint, 0x03A6));
+ jsxEntity.putAssumeCapacity("Chi", @as(CodePoint, 0x03A7));
+ jsxEntity.putAssumeCapacity("Psi", @as(CodePoint, 0x03A8));
+ jsxEntity.putAssumeCapacity("Omega", @as(CodePoint, 0x03A9));
+ jsxEntity.putAssumeCapacity("alpha", @as(CodePoint, 0x03B1));
+ jsxEntity.putAssumeCapacity("beta", @as(CodePoint, 0x03B2));
+ jsxEntity.putAssumeCapacity("gamma", @as(CodePoint, 0x03B3));
+ jsxEntity.putAssumeCapacity("delta", @as(CodePoint, 0x03B4));
+ jsxEntity.putAssumeCapacity("epsilon", @as(CodePoint, 0x03B5));
+ jsxEntity.putAssumeCapacity("zeta", @as(CodePoint, 0x03B6));
+ jsxEntity.putAssumeCapacity("eta", @as(CodePoint, 0x03B7));
+ jsxEntity.putAssumeCapacity("theta", @as(CodePoint, 0x03B8));
+ jsxEntity.putAssumeCapacity("iota", @as(CodePoint, 0x03B9));
+ jsxEntity.putAssumeCapacity("kappa", @as(CodePoint, 0x03BA));
+ jsxEntity.putAssumeCapacity("lambda", @as(CodePoint, 0x03BB));
+ jsxEntity.putAssumeCapacity("mu", @as(CodePoint, 0x03BC));
+ jsxEntity.putAssumeCapacity("nu", @as(CodePoint, 0x03BD));
+ jsxEntity.putAssumeCapacity("xi", @as(CodePoint, 0x03BE));
+ jsxEntity.putAssumeCapacity("omicron", @as(CodePoint, 0x03BF));
+ jsxEntity.putAssumeCapacity("pi", @as(CodePoint, 0x03C0));
+ jsxEntity.putAssumeCapacity("rho", @as(CodePoint, 0x03C1));
+ jsxEntity.putAssumeCapacity("sigmaf", @as(CodePoint, 0x03C2));
+ jsxEntity.putAssumeCapacity("sigma", @as(CodePoint, 0x03C3));
+ jsxEntity.putAssumeCapacity("tau", @as(CodePoint, 0x03C4));
+ jsxEntity.putAssumeCapacity("upsilon", @as(CodePoint, 0x03C5));
+ jsxEntity.putAssumeCapacity("phi", @as(CodePoint, 0x03C6));
+ jsxEntity.putAssumeCapacity("chi", @as(CodePoint, 0x03C7));
+ jsxEntity.putAssumeCapacity("psi", @as(CodePoint, 0x03C8));
+ jsxEntity.putAssumeCapacity("omega", @as(CodePoint, 0x03C9));
+ jsxEntity.putAssumeCapacity("thetasym", @as(CodePoint, 0x03D1));
+ jsxEntity.putAssumeCapacity("upsih", @as(CodePoint, 0x03D2));
+ jsxEntity.putAssumeCapacity("piv", @as(CodePoint, 0x03D6));
+ jsxEntity.putAssumeCapacity("ensp", @as(CodePoint, 0x2002));
+ jsxEntity.putAssumeCapacity("emsp", @as(CodePoint, 0x2003));
+ jsxEntity.putAssumeCapacity("thinsp", @as(CodePoint, 0x2009));
+ jsxEntity.putAssumeCapacity("zwnj", @as(CodePoint, 0x200C));
+ jsxEntity.putAssumeCapacity("zwj", @as(CodePoint, 0x200D));
+ jsxEntity.putAssumeCapacity("lrm", @as(CodePoint, 0x200E));
+ jsxEntity.putAssumeCapacity("rlm", @as(CodePoint, 0x200F));
+ jsxEntity.putAssumeCapacity("ndash", @as(CodePoint, 0x2013));
+ jsxEntity.putAssumeCapacity("mdash", @as(CodePoint, 0x2014));
+ jsxEntity.putAssumeCapacity("lsquo", @as(CodePoint, 0x2018));
+ jsxEntity.putAssumeCapacity("rsquo", @as(CodePoint, 0x2019));
+ jsxEntity.putAssumeCapacity("sbquo", @as(CodePoint, 0x201A));
+ jsxEntity.putAssumeCapacity("ldquo", @as(CodePoint, 0x201C));
+ jsxEntity.putAssumeCapacity("rdquo", @as(CodePoint, 0x201D));
+ jsxEntity.putAssumeCapacity("bdquo", @as(CodePoint, 0x201E));
+ jsxEntity.putAssumeCapacity("dagger", @as(CodePoint, 0x2020));
+ jsxEntity.putAssumeCapacity("Dagger", @as(CodePoint, 0x2021));
+ jsxEntity.putAssumeCapacity("bull", @as(CodePoint, 0x2022));
+ jsxEntity.putAssumeCapacity("hellip", @as(CodePoint, 0x2026));
+ jsxEntity.putAssumeCapacity("permil", @as(CodePoint, 0x2030));
+ jsxEntity.putAssumeCapacity("prime", @as(CodePoint, 0x2032));
+ jsxEntity.putAssumeCapacity("Prime", @as(CodePoint, 0x2033));
+ jsxEntity.putAssumeCapacity("lsaquo", @as(CodePoint, 0x2039));
+ jsxEntity.putAssumeCapacity("rsaquo", @as(CodePoint, 0x203A));
+ jsxEntity.putAssumeCapacity("oline", @as(CodePoint, 0x203E));
+ jsxEntity.putAssumeCapacity("frasl", @as(CodePoint, 0x2044));
+ jsxEntity.putAssumeCapacity("euro", @as(CodePoint, 0x20AC));
+ jsxEntity.putAssumeCapacity("image", @as(CodePoint, 0x2111));
+ jsxEntity.putAssumeCapacity("weierp", @as(CodePoint, 0x2118));
+ jsxEntity.putAssumeCapacity("real", @as(CodePoint, 0x211C));
+ jsxEntity.putAssumeCapacity("trade", @as(CodePoint, 0x2122));
+ jsxEntity.putAssumeCapacity("alefsym", @as(CodePoint, 0x2135));
+ jsxEntity.putAssumeCapacity("larr", @as(CodePoint, 0x2190));
+ jsxEntity.putAssumeCapacity("uarr", @as(CodePoint, 0x2191));
+ jsxEntity.putAssumeCapacity("rarr", @as(CodePoint, 0x2192));
+ jsxEntity.putAssumeCapacity("darr", @as(CodePoint, 0x2193));
+ jsxEntity.putAssumeCapacity("harr", @as(CodePoint, 0x2194));
+ jsxEntity.putAssumeCapacity("crarr", @as(CodePoint, 0x21B5));
+ jsxEntity.putAssumeCapacity("lArr", @as(CodePoint, 0x21D0));
+ jsxEntity.putAssumeCapacity("uArr", @as(CodePoint, 0x21D1));
+ jsxEntity.putAssumeCapacity("rArr", @as(CodePoint, 0x21D2));
+ jsxEntity.putAssumeCapacity("dArr", @as(CodePoint, 0x21D3));
+ jsxEntity.putAssumeCapacity("hArr", @as(CodePoint, 0x21D4));
+ jsxEntity.putAssumeCapacity("forall", @as(CodePoint, 0x2200));
+ jsxEntity.putAssumeCapacity("part", @as(CodePoint, 0x2202));
+ jsxEntity.putAssumeCapacity("exist", @as(CodePoint, 0x2203));
+ jsxEntity.putAssumeCapacity("empty", @as(CodePoint, 0x2205));
+ jsxEntity.putAssumeCapacity("nabla", @as(CodePoint, 0x2207));
+ jsxEntity.putAssumeCapacity("isin", @as(CodePoint, 0x2208));
+ jsxEntity.putAssumeCapacity("notin", @as(CodePoint, 0x2209));
+ jsxEntity.putAssumeCapacity("ni", @as(CodePoint, 0x220B));
+ jsxEntity.putAssumeCapacity("prod", @as(CodePoint, 0x220F));
+ jsxEntity.putAssumeCapacity("sum", @as(CodePoint, 0x2211));
+ jsxEntity.putAssumeCapacity("minus", @as(CodePoint, 0x2212));
+ jsxEntity.putAssumeCapacity("lowast", @as(CodePoint, 0x2217));
+ jsxEntity.putAssumeCapacity("radic", @as(CodePoint, 0x221A));
+ jsxEntity.putAssumeCapacity("prop", @as(CodePoint, 0x221D));
+ jsxEntity.putAssumeCapacity("infin", @as(CodePoint, 0x221E));
+ jsxEntity.putAssumeCapacity("ang", @as(CodePoint, 0x2220));
+ jsxEntity.putAssumeCapacity("and", @as(CodePoint, 0x2227));
+ jsxEntity.putAssumeCapacity("or", @as(CodePoint, 0x2228));
+ jsxEntity.putAssumeCapacity("cap", @as(CodePoint, 0x2229));
+ jsxEntity.putAssumeCapacity("cup", @as(CodePoint, 0x222A));
+ jsxEntity.putAssumeCapacity("int", @as(CodePoint, 0x222B));
+ jsxEntity.putAssumeCapacity("there4", @as(CodePoint, 0x2234));
+ jsxEntity.putAssumeCapacity("sim", @as(CodePoint, 0x223C));
+ jsxEntity.putAssumeCapacity("cong", @as(CodePoint, 0x2245));
+ jsxEntity.putAssumeCapacity("asymp", @as(CodePoint, 0x2248));
+ jsxEntity.putAssumeCapacity("ne", @as(CodePoint, 0x2260));
+ jsxEntity.putAssumeCapacity("equiv", @as(CodePoint, 0x2261));
+ jsxEntity.putAssumeCapacity("le", @as(CodePoint, 0x2264));
+ jsxEntity.putAssumeCapacity("ge", @as(CodePoint, 0x2265));
+ jsxEntity.putAssumeCapacity("sub", @as(CodePoint, 0x2282));
+ jsxEntity.putAssumeCapacity("sup", @as(CodePoint, 0x2283));
+ jsxEntity.putAssumeCapacity("nsub", @as(CodePoint, 0x2284));
+ jsxEntity.putAssumeCapacity("sube", @as(CodePoint, 0x2286));
+ jsxEntity.putAssumeCapacity("supe", @as(CodePoint, 0x2287));
+ jsxEntity.putAssumeCapacity("oplus", @as(CodePoint, 0x2295));
+ jsxEntity.putAssumeCapacity("otimes", @as(CodePoint, 0x2297));
+ jsxEntity.putAssumeCapacity("perp", @as(CodePoint, 0x22A5));
+ jsxEntity.putAssumeCapacity("sdot", @as(CodePoint, 0x22C5));
+ jsxEntity.putAssumeCapacity("lceil", @as(CodePoint, 0x2308));
+ jsxEntity.putAssumeCapacity("rceil", @as(CodePoint, 0x2309));
+ jsxEntity.putAssumeCapacity("lfloor", @as(CodePoint, 0x230A));
+ jsxEntity.putAssumeCapacity("rfloor", @as(CodePoint, 0x230B));
+ jsxEntity.putAssumeCapacity("lang", @as(CodePoint, 0x2329));
+ jsxEntity.putAssumeCapacity("rang", @as(CodePoint, 0x232A));
+ jsxEntity.putAssumeCapacity("loz", @as(CodePoint, 0x25CA));
+ jsxEntity.putAssumeCapacity("spades", @as(CodePoint, 0x2660));
+ jsxEntity.putAssumeCapacity("clubs", @as(CodePoint, 0x2663));
+ jsxEntity.putAssumeCapacity("hearts", @as(CodePoint, 0x2665));
+ jsxEntity.putAssumeCapacity("diams", @as(CodePoint, 0x2666));
+}
+
+test "tokenToString" {
+ expectString(tokenToString.get(T.t_end_of_file), "end of file");
+}
+
+test "jsxEntity" {
+ try alloc.setup(std.heap.page_allocator);
+
+ initJSXEntityMap() catch |err| {
+ @panic(@errorName(err));
+ };
+
+ if (jsxEntity.get("sim")) |v| {
+ expect(v == 0x223C);
+ }
+}