123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996(*
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*)openPrimitive_derivingtypet=|T_NUMBERof{kind:number_type;raw:string;}|T_BIGINTof{kind:bigint_type;raw:string;}|T_STRINGof(Loc.t*string*string*bool)(* loc, value, raw, octal *)|T_TEMPLATE_PARTof(Loc.t*template_part*bool)(* loc, value, is_tail *)|T_IDENTIFIERof{loc:Loc.t;value:string;raw:string;}|T_REGEXPofLoc.t*string*string(* /pattern/flags *)(* Syntax *)|T_LCURLY|T_RCURLY|T_LCURLYBAR|T_RCURLYBAR|T_LPAREN|T_RPAREN|T_LBRACKET|T_RBRACKET|T_SEMICOLON|T_COMMA|T_PERIOD|T_ARROW|T_ELLIPSIS|T_AT|T_POUND(* Keywords *)|T_FUNCTION|T_IF|T_IN|T_INSTANCEOF|T_RETURN|T_SWITCH|T_THIS|T_THROW|T_TRY|T_VAR|T_WHILE|T_WITH|T_CONST|T_LET|T_NULL|T_FALSE|T_TRUE|T_BREAK|T_CASE|T_CATCH|T_CONTINUE|T_DEFAULT|T_DO|T_FINALLY|T_FOR|T_CLASS|T_EXTENDS|T_STATIC|T_ELSE|T_NEW|T_DELETE|T_TYPEOF|T_VOID|T_ENUM|T_EXPORT|T_IMPORT|T_SUPER|T_IMPLEMENTS|T_INTERFACE|T_PACKAGE|T_PRIVATE|T_PROTECTED|T_PUBLIC|T_YIELD|T_DEBUGGER|T_DECLARE|T_TYPE|T_OPAQUE|T_OF|T_ASYNC|T_AWAIT|T_CHECKS(* Operators *)|T_RSHIFT3_ASSIGN|T_RSHIFT_ASSIGN|T_LSHIFT_ASSIGN|T_BIT_XOR_ASSIGN|T_BIT_OR_ASSIGN|T_BIT_AND_ASSIGN|T_MOD_ASSIGN|T_DIV_ASSIGN|T_MULT_ASSIGN|T_EXP_ASSIGN|T_MINUS_ASSIGN|T_PLUS_ASSIGN|T_NULLISH_ASSIGN|T_AND_ASSIGN|T_OR_ASSIGN|T_ASSIGN|T_PLING_PERIOD|T_PLING_PLING|T_PLING|T_COLON|T_OR|T_AND|T_BIT_OR|T_BIT_XOR|T_BIT_AND|T_EQUAL|T_NOT_EQUAL|T_STRICT_EQUAL|T_STRICT_NOT_EQUAL|T_LESS_THAN_EQUAL|T_GREATER_THAN_EQUAL|T_LESS_THAN|T_GREATER_THAN|T_LSHIFT|T_RSHIFT|T_RSHIFT3|T_PLUS|T_MINUS|T_DIV|T_MULT|T_EXP|T_MOD|T_NOT|T_BIT_NOT|T_INCR|T_DECR(* Extra tokens *)|T_ERRORofstring|T_EOF(* JSX *)|T_JSX_IDENTIFIERof{raw:string;loc:Loc.t;}|T_JSX_TEXTofLoc.t*string*string(* loc, value, raw *)(* Type primitives *)|T_ANY_TYPE|T_MIXED_TYPE|T_EMPTY_TYPE|T_BOOLEAN_TYPEofbool_or_boolean|T_NUMBER_TYPE|T_BIGINT_TYPE|T_NUMBER_SINGLETON_TYPEof{kind:number_type;value:float;raw:string;}|T_BIGINT_SINGLETON_TYPEof{kind:bigint_type;value:int64option;raw:string;}|T_STRING_TYPE|T_VOID_TYPE|T_SYMBOL_TYPE(* `bool` and `boolean` are equivalent annotations, but we need to track
which one was used for when it might be an identifier, as in
`(bool: boolean) => void`. It's lexed as two T_BOOLEAN_TYPEs, then the
first one is converted into an identifier. *)andbool_or_boolean=|BOOL|BOOLEANandnumber_type=|BINARY|LEGACY_OCTAL|LEGACY_NON_OCTAL(* NonOctalDecimalIntegerLiteral in Annex B *)|OCTAL|NORMALandbigint_type=|BIG_BINARY|BIG_OCTAL|BIG_NORMALandtemplate_part={cooked:string;(* string after processing special chars *)raw:string;(* string as specified in source *)literal:string;(* same as raw, plus characters like ` and ${ *)}[@@deriving_inlineequal]let_=fun(_:t)->()let_=fun(_:bool_or_boolean)->()let_=fun(_:number_type)->()let_=fun(_:bigint_type)->()let_=fun(_:template_part)->()letrecequal=(funa__001_->funb__002_->ifPpx_compare_lib.phys_equala__001_b__002_thentrueelse(match(a__001_,b__002_)with|(T_NUMBER_a__003_,T_NUMBER_b__004_)->Ppx_compare_lib.(&&)(equal_number_type_a__003_.kind_b__004_.kind)(equal_string_a__003_.raw_b__004_.raw)|(T_NUMBER_,_)->false|(_,T_NUMBER_)->false|(T_BIGINT_a__005_,T_BIGINT_b__006_)->Ppx_compare_lib.(&&)(equal_bigint_type_a__005_.kind_b__006_.kind)(equal_string_a__005_.raw_b__006_.raw)|(T_BIGINT_,_)->false|(_,T_BIGINT_)->false|(T_STRING_a__007_,T_STRING_b__008_)->let(t__009_,t__010_,t__011_,t__012_)=_a__007_inlet(t__013_,t__014_,t__015_,t__016_)=_b__008_inPpx_compare_lib.(&&)(Loc.equalt__009_t__013_)(Ppx_compare_lib.(&&)(equal_stringt__010_t__014_)(Ppx_compare_lib.(&&)(equal_stringt__011_t__015_)(equal_boolt__012_t__016_)))|(T_STRING_,_)->false|(_,T_STRING_)->false|(T_TEMPLATE_PART_a__017_,T_TEMPLATE_PART_b__018_)->let(t__019_,t__020_,t__021_)=_a__017_inlet(t__022_,t__023_,t__024_)=_b__018_inPpx_compare_lib.(&&)(Loc.equalt__019_t__022_)(Ppx_compare_lib.(&&)(equal_template_partt__020_t__023_)(equal_boolt__021_t__024_))|(T_TEMPLATE_PART_,_)->false|(_,T_TEMPLATE_PART_)->false|(T_IDENTIFIER_a__025_,T_IDENTIFIER_b__026_)->Ppx_compare_lib.(&&)(Loc.equal_a__025_.loc_b__026_.loc)(Ppx_compare_lib.(&&)(equal_string_a__025_.value_b__026_.value)(equal_string_a__025_.raw_b__026_.raw))|(T_IDENTIFIER_,_)->false|(_,T_IDENTIFIER_)->false|(T_REGEXP(_a__027_,_a__029_,_a__031_),T_REGEXP(_b__028_,_b__030_,_b__032_))->Ppx_compare_lib.(&&)(Loc.equal_a__027__b__028_)(Ppx_compare_lib.(&&)(equal_string_a__029__b__030_)(equal_string_a__031__b__032_))|(T_REGEXP_,_)->false|(_,T_REGEXP_)->false|(T_LCURLY,T_LCURLY)->true|(T_LCURLY,_)->false|(_,T_LCURLY)->false|(T_RCURLY,T_RCURLY)->true|(T_RCURLY,_)->false|(_,T_RCURLY)->false|(T_LCURLYBAR,T_LCURLYBAR)->true|(T_LCURLYBAR,_)->false|(_,T_LCURLYBAR)->false|(T_RCURLYBAR,T_RCURLYBAR)->true|(T_RCURLYBAR,_)->false|(_,T_RCURLYBAR)->false|(T_LPAREN,T_LPAREN)->true|(T_LPAREN,_)->false|(_,T_LPAREN)->false|(T_RPAREN,T_RPAREN)->true|(T_RPAREN,_)->false|(_,T_RPAREN)->false|(T_LBRACKET,T_LBRACKET)->true|(T_LBRACKET,_)->false|(_,T_LBRACKET)->false|(T_RBRACKET,T_RBRACKET)->true|(T_RBRACKET,_)->false|(_,T_RBRACKET)->false|(T_SEMICOLON,T_SEMICOLON)->true|(T_SEMICOLON,_)->false|(_,T_SEMICOLON)->false|(T_COMMA,T_COMMA)->true|(T_COMMA,_)->false|(_,T_COMMA)->false|(T_PERIOD,T_PERIOD)->true|(T_PERIOD,_)->false|(_,T_PERIOD)->false|(T_ARROW,T_ARROW)->true|(T_ARROW,_)->false|(_,T_ARROW)->false|(T_ELLIPSIS,T_ELLIPSIS)->true|(T_ELLIPSIS,_)->false|(_,T_ELLIPSIS)->false|(T_AT,T_AT)->true|(T_AT,_)->false|(_,T_AT)->false|(T_POUND,T_POUND)->true|(T_POUND,_)->false|(_,T_POUND)->false|(T_FUNCTION,T_FUNCTION)->true|(T_FUNCTION,_)->false|(_,T_FUNCTION)->false|(T_IF,T_IF)->true|(T_IF,_)->false|(_,T_IF)->false|(T_IN,T_IN)->true|(T_IN,_)->false|(_,T_IN)->false|(T_INSTANCEOF,T_INSTANCEOF)->true|(T_INSTANCEOF,_)->false|(_,T_INSTANCEOF)->false|(T_RETURN,T_RETURN)->true|(T_RETURN,_)->false|(_,T_RETURN)->false|(T_SWITCH,T_SWITCH)->true|(T_SWITCH,_)->false|(_,T_SWITCH)->false|(T_THIS,T_THIS)->true|(T_THIS,_)->false|(_,T_THIS)->false|(T_THROW,T_THROW)->true|(T_THROW,_)->false|(_,T_THROW)->false|(T_TRY,T_TRY)->true|(T_TRY,_)->false|(_,T_TRY)->false|(T_VAR,T_VAR)->true|(T_VAR,_)->false|(_,T_VAR)->false|(T_WHILE,T_WHILE)->true|(T_WHILE,_)->false|(_,T_WHILE)->false|(T_WITH,T_WITH)->true|(T_WITH,_)->false|(_,T_WITH)->false|(T_CONST,T_CONST)->true|(T_CONST,_)->false|(_,T_CONST)->false|(T_LET,T_LET)->true|(T_LET,_)->false|(_,T_LET)->false|(T_NULL,T_NULL)->true|(T_NULL,_)->false|(_,T_NULL)->false|(T_FALSE,T_FALSE)->true|(T_FALSE,_)->false|(_,T_FALSE)->false|(T_TRUE,T_TRUE)->true|(T_TRUE,_)->false|(_,T_TRUE)->false|(T_BREAK,T_BREAK)->true|(T_BREAK,_)->false|(_,T_BREAK)->false|(T_CASE,T_CASE)->true|(T_CASE,_)->false|(_,T_CASE)->false|(T_CATCH,T_CATCH)->true|(T_CATCH,_)->false|(_,T_CATCH)->false|(T_CONTINUE,T_CONTINUE)->true|(T_CONTINUE,_)->false|(_,T_CONTINUE)->false|(T_DEFAULT,T_DEFAULT)->true|(T_DEFAULT,_)->false|(_,T_DEFAULT)->false|(T_DO,T_DO)->true|(T_DO,_)->false|(_,T_DO)->false|(T_FINALLY,T_FINALLY)->true|(T_FINALLY,_)->false|(_,T_FINALLY)->false|(T_FOR,T_FOR)->true|(T_FOR,_)->false|(_,T_FOR)->false|(T_CLASS,T_CLASS)->true|(T_CLASS,_)->false|(_,T_CLASS)->false|(T_EXTENDS,T_EXTENDS)->true|(T_EXTENDS,_)->false|(_,T_EXTENDS)->false|(T_STATIC,T_STATIC)->true|(T_STATIC,_)->false|(_,T_STATIC)->false|(T_ELSE,T_ELSE)->true|(T_ELSE,_)->false|(_,T_ELSE)->false|(T_NEW,T_NEW)->true|(T_NEW,_)->false|(_,T_NEW)->false|(T_DELETE,T_DELETE)->true|(T_DELETE,_)->false|(_,T_DELETE)->false|(T_TYPEOF,T_TYPEOF)->true|(T_TYPEOF,_)->false|(_,T_TYPEOF)->false|(T_VOID,T_VOID)->true|(T_VOID,_)->false|(_,T_VOID)->false|(T_ENUM,T_ENUM)->true|(T_ENUM,_)->false|(_,T_ENUM)->false|(T_EXPORT,T_EXPORT)->true|(T_EXPORT,_)->false|(_,T_EXPORT)->false|(T_IMPORT,T_IMPORT)->true|(T_IMPORT,_)->false|(_,T_IMPORT)->false|(T_SUPER,T_SUPER)->true|(T_SUPER,_)->false|(_,T_SUPER)->false|(T_IMPLEMENTS,T_IMPLEMENTS)->true|(T_IMPLEMENTS,_)->false|(_,T_IMPLEMENTS)->false|(T_INTERFACE,T_INTERFACE)->true|(T_INTERFACE,_)->false|(_,T_INTERFACE)->false|(T_PACKAGE,T_PACKAGE)->true|(T_PACKAGE,_)->false|(_,T_PACKAGE)->false|(T_PRIVATE,T_PRIVATE)->true|(T_PRIVATE,_)->false|(_,T_PRIVATE)->false|(T_PROTECTED,T_PROTECTED)->true|(T_PROTECTED,_)->false|(_,T_PROTECTED)->false|(T_PUBLIC,T_PUBLIC)->true|(T_PUBLIC,_)->false|(_,T_PUBLIC)->false|(T_YIELD,T_YIELD)->true|(T_YIELD,_)->false|(_,T_YIELD)->false|(T_DEBUGGER,T_DEBUGGER)->true|(T_DEBUGGER,_)->false|(_,T_DEBUGGER)->false|(T_DECLARE,T_DECLARE)->true|(T_DECLARE,_)->false|(_,T_DECLARE)->false|(T_TYPE,T_TYPE)->true|(T_TYPE,_)->false|(_,T_TYPE)->false|(T_OPAQUE,T_OPAQUE)->true|(T_OPAQUE,_)->false|(_,T_OPAQUE)->false|(T_OF,T_OF)->true|(T_OF,_)->false|(_,T_OF)->false|(T_ASYNC,T_ASYNC)->true|(T_ASYNC,_)->false|(_,T_ASYNC)->false|(T_AWAIT,T_AWAIT)->true|(T_AWAIT,_)->false|(_,T_AWAIT)->false|(T_CHECKS,T_CHECKS)->true|(T_CHECKS,_)->false|(_,T_CHECKS)->false|(T_RSHIFT3_ASSIGN,T_RSHIFT3_ASSIGN)->true|(T_RSHIFT3_ASSIGN,_)->false|(_,T_RSHIFT3_ASSIGN)->false|(T_RSHIFT_ASSIGN,T_RSHIFT_ASSIGN)->true|(T_RSHIFT_ASSIGN,_)->false|(_,T_RSHIFT_ASSIGN)->false|(T_LSHIFT_ASSIGN,T_LSHIFT_ASSIGN)->true|(T_LSHIFT_ASSIGN,_)->false|(_,T_LSHIFT_ASSIGN)->false|(T_BIT_XOR_ASSIGN,T_BIT_XOR_ASSIGN)->true|(T_BIT_XOR_ASSIGN,_)->false|(_,T_BIT_XOR_ASSIGN)->false|(T_BIT_OR_ASSIGN,T_BIT_OR_ASSIGN)->true|(T_BIT_OR_ASSIGN,_)->false|(_,T_BIT_OR_ASSIGN)->false|(T_BIT_AND_ASSIGN,T_BIT_AND_ASSIGN)->true|(T_BIT_AND_ASSIGN,_)->false|(_,T_BIT_AND_ASSIGN)->false|(T_MOD_ASSIGN,T_MOD_ASSIGN)->true|(T_MOD_ASSIGN,_)->false|(_,T_MOD_ASSIGN)->false|(T_DIV_ASSIGN,T_DIV_ASSIGN)->true|(T_DIV_ASSIGN,_)->false|(_,T_DIV_ASSIGN)->false|(T_MULT_ASSIGN,T_MULT_ASSIGN)->true|(T_MULT_ASSIGN,_)->false|(_,T_MULT_ASSIGN)->false|(T_EXP_ASSIGN,T_EXP_ASSIGN)->true|(T_EXP_ASSIGN,_)->false|(_,T_EXP_ASSIGN)->false|(T_MINUS_ASSIGN,T_MINUS_ASSIGN)->true|(T_MINUS_ASSIGN,_)->false|(_,T_MINUS_ASSIGN)->false|(T_PLUS_ASSIGN,T_PLUS_ASSIGN)->true|(T_PLUS_ASSIGN,_)->false|(_,T_PLUS_ASSIGN)->false|(T_NULLISH_ASSIGN,T_NULLISH_ASSIGN)->true|(T_NULLISH_ASSIGN,_)->false|(_,T_NULLISH_ASSIGN)->false|(T_AND_ASSIGN,T_AND_ASSIGN)->true|(T_AND_ASSIGN,_)->false|(_,T_AND_ASSIGN)->false|(T_OR_ASSIGN,T_OR_ASSIGN)->true|(T_OR_ASSIGN,_)->false|(_,T_OR_ASSIGN)->false|(T_ASSIGN,T_ASSIGN)->true|(T_ASSIGN,_)->false|(_,T_ASSIGN)->false|(T_PLING_PERIOD,T_PLING_PERIOD)->true|(T_PLING_PERIOD,_)->false|(_,T_PLING_PERIOD)->false|(T_PLING_PLING,T_PLING_PLING)->true|(T_PLING_PLING,_)->false|(_,T_PLING_PLING)->false|(T_PLING,T_PLING)->true|(T_PLING,_)->false|(_,T_PLING)->false|(T_COLON,T_COLON)->true|(T_COLON,_)->false|(_,T_COLON)->false|(T_OR,T_OR)->true|(T_OR,_)->false|(_,T_OR)->false|(T_AND,T_AND)->true|(T_AND,_)->false|(_,T_AND)->false|(T_BIT_OR,T_BIT_OR)->true|(T_BIT_OR,_)->false|(_,T_BIT_OR)->false|(T_BIT_XOR,T_BIT_XOR)->true|(T_BIT_XOR,_)->false|(_,T_BIT_XOR)->false|(T_BIT_AND,T_BIT_AND)->true|(T_BIT_AND,_)->false|(_,T_BIT_AND)->false|(T_EQUAL,T_EQUAL)->true|(T_EQUAL,_)->false|(_,T_EQUAL)->false|(T_NOT_EQUAL,T_NOT_EQUAL)->true|(T_NOT_EQUAL,_)->false|(_,T_NOT_EQUAL)->false|(T_STRICT_EQUAL,T_STRICT_EQUAL)->true|(T_STRICT_EQUAL,_)->false|(_,T_STRICT_EQUAL)->false|(T_STRICT_NOT_EQUAL,T_STRICT_NOT_EQUAL)->true|(T_STRICT_NOT_EQUAL,_)->false|(_,T_STRICT_NOT_EQUAL)->false|(T_LESS_THAN_EQUAL,T_LESS_THAN_EQUAL)->true|(T_LESS_THAN_EQUAL,_)->false|(_,T_LESS_THAN_EQUAL)->false|(T_GREATER_THAN_EQUAL,T_GREATER_THAN_EQUAL)->true|(T_GREATER_THAN_EQUAL,_)->false|(_,T_GREATER_THAN_EQUAL)->false|(T_LESS_THAN,T_LESS_THAN)->true|(T_LESS_THAN,_)->false|(_,T_LESS_THAN)->false|(T_GREATER_THAN,T_GREATER_THAN)->true|(T_GREATER_THAN,_)->false|(_,T_GREATER_THAN)->false|(T_LSHIFT,T_LSHIFT)->true|(T_LSHIFT,_)->false|(_,T_LSHIFT)->false|(T_RSHIFT,T_RSHIFT)->true|(T_RSHIFT,_)->false|(_,T_RSHIFT)->false|(T_RSHIFT3,T_RSHIFT3)->true|(T_RSHIFT3,_)->false|(_,T_RSHIFT3)->false|(T_PLUS,T_PLUS)->true|(T_PLUS,_)->false|(_,T_PLUS)->false|(T_MINUS,T_MINUS)->true|(T_MINUS,_)->false|(_,T_MINUS)->false|(T_DIV,T_DIV)->true|(T_DIV,_)->false|(_,T_DIV)->false|(T_MULT,T_MULT)->true|(T_MULT,_)->false|(_,T_MULT)->false|(T_EXP,T_EXP)->true|(T_EXP,_)->false|(_,T_EXP)->false|(T_MOD,T_MOD)->true|(T_MOD,_)->false|(_,T_MOD)->false|(T_NOT,T_NOT)->true|(T_NOT,_)->false|(_,T_NOT)->false|(T_BIT_NOT,T_BIT_NOT)->true|(T_BIT_NOT,_)->false|(_,T_BIT_NOT)->false|(T_INCR,T_INCR)->true|(T_INCR,_)->false|(_,T_INCR)->false|(T_DECR,T_DECR)->true|(T_DECR,_)->false|(_,T_DECR)->false|(T_ERROR_a__033_,T_ERROR_b__034_)->equal_string_a__033__b__034_|(T_ERROR_,_)->false|(_,T_ERROR_)->false|(T_EOF,T_EOF)->true|(T_EOF,_)->false|(_,T_EOF)->false|(T_JSX_IDENTIFIER_a__035_,T_JSX_IDENTIFIER_b__036_)->Ppx_compare_lib.(&&)(equal_string_a__035_.raw_b__036_.raw)(Loc.equal_a__035_.loc_b__036_.loc)|(T_JSX_IDENTIFIER_,_)->false|(_,T_JSX_IDENTIFIER_)->false|(T_JSX_TEXT(_a__037_,_a__039_,_a__041_),T_JSX_TEXT(_b__038_,_b__040_,_b__042_))->Ppx_compare_lib.(&&)(Loc.equal_a__037__b__038_)(Ppx_compare_lib.(&&)(equal_string_a__039__b__040_)(equal_string_a__041__b__042_))|(T_JSX_TEXT_,_)->false|(_,T_JSX_TEXT_)->false|(T_ANY_TYPE,T_ANY_TYPE)->true|(T_ANY_TYPE,_)->false|(_,T_ANY_TYPE)->false|(T_MIXED_TYPE,T_MIXED_TYPE)->true|(T_MIXED_TYPE,_)->false|(_,T_MIXED_TYPE)->false|(T_EMPTY_TYPE,T_EMPTY_TYPE)->true|(T_EMPTY_TYPE,_)->false|(_,T_EMPTY_TYPE)->false|(T_BOOLEAN_TYPE_a__043_,T_BOOLEAN_TYPE_b__044_)->equal_bool_or_boolean_a__043__b__044_|(T_BOOLEAN_TYPE_,_)->false|(_,T_BOOLEAN_TYPE_)->false|(T_NUMBER_TYPE,T_NUMBER_TYPE)->true|(T_NUMBER_TYPE,_)->false|(_,T_NUMBER_TYPE)->false|(T_BIGINT_TYPE,T_BIGINT_TYPE)->true|(T_BIGINT_TYPE,_)->false|(_,T_BIGINT_TYPE)->false|(T_NUMBER_SINGLETON_TYPE_a__045_,T_NUMBER_SINGLETON_TYPE_b__046_)->Ppx_compare_lib.(&&)(equal_number_type_a__045_.kind_b__046_.kind)(Ppx_compare_lib.(&&)(equal_float_a__045_.value_b__046_.value)(equal_string_a__045_.raw_b__046_.raw))|(T_NUMBER_SINGLETON_TYPE_,_)->false|(_,T_NUMBER_SINGLETON_TYPE_)->false|(T_BIGINT_SINGLETON_TYPE_a__047_,T_BIGINT_SINGLETON_TYPE_b__048_)->Ppx_compare_lib.(&&)(equal_bigint_type_a__047_.kind_b__048_.kind)(Ppx_compare_lib.(&&)(equal_optionequal_int64_a__047_.value_b__048_.value)(equal_string_a__047_.raw_b__048_.raw))|(T_BIGINT_SINGLETON_TYPE_,_)->false|(_,T_BIGINT_SINGLETON_TYPE_)->false|(T_STRING_TYPE,T_STRING_TYPE)->true|(T_STRING_TYPE,_)->false|(_,T_STRING_TYPE)->false|(T_VOID_TYPE,T_VOID_TYPE)->true|(T_VOID_TYPE,_)->false|(_,T_VOID_TYPE)->false|(T_SYMBOL_TYPE,T_SYMBOL_TYPE)->true):t->t->bool)andequal_bool_or_boolean=(funa__051_->funb__052_->Ppx_compare_lib.polymorphic_equala__051_b__052_:bool_or_boolean->bool_or_boolean->bool)andequal_number_type=(funa__053_->funb__054_->Ppx_compare_lib.polymorphic_equala__053_b__054_:number_type->number_type->bool)andequal_bigint_type=(funa__055_->funb__056_->Ppx_compare_lib.polymorphic_equala__055_b__056_:bigint_type->bigint_type->bool)andequal_template_part=(funa__057_->funb__058_->ifPpx_compare_lib.phys_equala__057_b__058_thentrueelsePpx_compare_lib.(&&)(equal_stringa__057_.cookedb__058_.cooked)(Ppx_compare_lib.(&&)(equal_stringa__057_.rawb__058_.raw)(equal_stringa__057_.literalb__058_.literal)):template_part->template_part->bool)let_=equaland_=equal_bool_or_booleanand_=equal_number_typeand_=equal_bigint_typeand_=equal_template_part[@@@end](*****************************************************************************)(* Pretty printer (pretty?) *)(*****************************************************************************)lettoken_to_string=function|T_NUMBER_->"T_NUMBER"|T_BIGINT_->"T_BIGINT"|T_STRING_->"T_STRING"|T_TEMPLATE_PART_->"T_TEMPLATE_PART"|T_IDENTIFIER_->"T_IDENTIFIER"|T_REGEXP_->"T_REGEXP"|T_FUNCTION->"T_FUNCTION"|T_IF->"T_IF"|T_IN->"T_IN"|T_INSTANCEOF->"T_INSTANCEOF"|T_RETURN->"T_RETURN"|T_SWITCH->"T_SWITCH"|T_THIS->"T_THIS"|T_THROW->"T_THROW"|T_TRY->"T_TRY"|T_VAR->"T_VAR"|T_WHILE->"T_WHILE"|T_WITH->"T_WITH"|T_CONST->"T_CONST"|T_LET->"T_LET"|T_NULL->"T_NULL"|T_FALSE->"T_FALSE"|T_TRUE->"T_TRUE"|T_BREAK->"T_BREAK"|T_CASE->"T_CASE"|T_CATCH->"T_CATCH"|T_CONTINUE->"T_CONTINUE"|T_DEFAULT->"T_DEFAULT"|T_DO->"T_DO"|T_FINALLY->"T_FINALLY"|T_FOR->"T_FOR"|T_CLASS->"T_CLASS"|T_EXTENDS->"T_EXTENDS"|T_STATIC->"T_STATIC"|T_ELSE->"T_ELSE"|T_NEW->"T_NEW"|T_DELETE->"T_DELETE"|T_TYPEOF->"T_TYPEOF"|T_VOID->"T_VOID"|T_ENUM->"T_ENUM"|T_EXPORT->"T_EXPORT"|T_IMPORT->"T_IMPORT"|T_SUPER->"T_SUPER"|T_IMPLEMENTS->"T_IMPLEMENTS"|T_INTERFACE->"T_INTERFACE"|T_PACKAGE->"T_PACKAGE"|T_PRIVATE->"T_PRIVATE"|T_PROTECTED->"T_PROTECTED"|T_PUBLIC->"T_PUBLIC"|T_YIELD->"T_YIELD"|T_DEBUGGER->"T_DEBUGGER"|T_DECLARE->"T_DECLARE"|T_TYPE->"T_TYPE"|T_OPAQUE->"T_OPAQUE"|T_OF->"T_OF"|T_ASYNC->"T_ASYNC"|T_AWAIT->"T_AWAIT"|T_CHECKS->"T_CHECKS"|T_LCURLY->"T_LCURLY"|T_RCURLY->"T_RCURLY"|T_LCURLYBAR->"T_LCURLYBAR"|T_RCURLYBAR->"T_RCURLYBAR"|T_LPAREN->"T_LPAREN"|T_RPAREN->"T_RPAREN"|T_LBRACKET->"T_LBRACKET"|T_RBRACKET->"T_RBRACKET"|T_SEMICOLON->"T_SEMICOLON"|T_COMMA->"T_COMMA"|T_PERIOD->"T_PERIOD"|T_ARROW->"T_ARROW"|T_ELLIPSIS->"T_ELLIPSIS"|T_AT->"T_AT"|T_POUND->"T_POUND"|T_RSHIFT3_ASSIGN->"T_RSHIFT3_ASSIGN"|T_RSHIFT_ASSIGN->"T_RSHIFT_ASSIGN"|T_LSHIFT_ASSIGN->"T_LSHIFT_ASSIGN"|T_BIT_XOR_ASSIGN->"T_BIT_XOR_ASSIGN"|T_BIT_OR_ASSIGN->"T_BIT_OR_ASSIGN"|T_BIT_AND_ASSIGN->"T_BIT_AND_ASSIGN"|T_MOD_ASSIGN->"T_MOD_ASSIGN"|T_DIV_ASSIGN->"T_DIV_ASSIGN"|T_MULT_ASSIGN->"T_MULT_ASSIGN"|T_EXP_ASSIGN->"T_EXP_ASSIGN"|T_MINUS_ASSIGN->"T_MINUS_ASSIGN"|T_PLUS_ASSIGN->"T_PLUS_ASSIGN"|T_NULLISH_ASSIGN->"T_NULLISH_ASSIGN"|T_AND_ASSIGN->"T_AND_ASSIGN"|T_OR_ASSIGN->"T_OR_ASSIGN"|T_ASSIGN->"T_ASSIGN"|T_PLING_PERIOD->"T_PLING_PERIOD"|T_PLING_PLING->"T_PLING_PLING"|T_PLING->"T_PLING"|T_COLON->"T_COLON"|T_OR->"T_OR"|T_AND->"T_AND"|T_BIT_OR->"T_BIT_OR"|T_BIT_XOR->"T_BIT_XOR"|T_BIT_AND->"T_BIT_AND"|T_EQUAL->"T_EQUAL"|T_NOT_EQUAL->"T_NOT_EQUAL"|T_STRICT_EQUAL->"T_STRICT_EQUAL"|T_STRICT_NOT_EQUAL->"T_STRICT_NOT_EQUAL"|T_LESS_THAN_EQUAL->"T_LESS_THAN_EQUAL"|T_GREATER_THAN_EQUAL->"T_GREATER_THAN_EQUAL"|T_LESS_THAN->"T_LESS_THAN"|T_GREATER_THAN->"T_GREATER_THAN"|T_LSHIFT->"T_LSHIFT"|T_RSHIFT->"T_RSHIFT"|T_RSHIFT3->"T_RSHIFT3"|T_PLUS->"T_PLUS"|T_MINUS->"T_MINUS"|T_DIV->"T_DIV"|T_MULT->"T_MULT"|T_EXP->"T_EXP"|T_MOD->"T_MOD"|T_NOT->"T_NOT"|T_BIT_NOT->"T_BIT_NOT"|T_INCR->"T_INCR"|T_DECR->"T_DECR"(* Extra tokens *)|T_ERROR_->"T_ERROR"|T_EOF->"T_EOF"|T_JSX_IDENTIFIER_->"T_JSX_IDENTIFIER"|T_JSX_TEXT_->"T_JSX_TEXT"(* Type primitives *)|T_ANY_TYPE->"T_ANY_TYPE"|T_MIXED_TYPE->"T_MIXED_TYPE"|T_EMPTY_TYPE->"T_EMPTY_TYPE"|T_BOOLEAN_TYPE_->"T_BOOLEAN_TYPE"|T_NUMBER_TYPE->"T_NUMBER_TYPE"|T_BIGINT_TYPE->"T_BIGINT_TYPE"|T_NUMBER_SINGLETON_TYPE_->"T_NUMBER_SINGLETON_TYPE"|T_BIGINT_SINGLETON_TYPE_->"T_BIGINT_SINGLETON_TYPE"|T_STRING_TYPE->"T_STRING_TYPE"|T_VOID_TYPE->"T_VOID_TYPE"|T_SYMBOL_TYPE->"T_SYMBOL_TYPE"letvalue_of_token=function|T_NUMBER{raw;_}->raw|T_BIGINT{raw;_}->raw|T_STRING(_,_,raw,_)->raw|T_TEMPLATE_PART(_,{literal;_},_)->literal|T_IDENTIFIER{raw;_}->raw|T_REGEXP(_,pattern,flags)->"/"^pattern^"/"^flags|T_LCURLY->"{"|T_RCURLY->"}"|T_LCURLYBAR->"{|"|T_RCURLYBAR->"|}"|T_LPAREN->"("|T_RPAREN->")"|T_LBRACKET->"["|T_RBRACKET->"]"|T_SEMICOLON->";"|T_COMMA->","|T_PERIOD->"."|T_ARROW->"=>"|T_ELLIPSIS->"..."|T_AT->"@"|T_POUND->"#"|T_FUNCTION->"function"|T_IF->"if"|T_IN->"in"|T_INSTANCEOF->"instanceof"|T_RETURN->"return"|T_SWITCH->"switch"|T_THIS->"this"|T_THROW->"throw"|T_TRY->"try"|T_VAR->"var"|T_WHILE->"while"|T_WITH->"with"|T_CONST->"const"|T_LET->"let"|T_NULL->"null"|T_FALSE->"false"|T_TRUE->"true"|T_BREAK->"break"|T_CASE->"case"|T_CATCH->"catch"|T_CONTINUE->"continue"|T_DEFAULT->"default"|T_DO->"do"|T_FINALLY->"finally"|T_FOR->"for"|T_CLASS->"class"|T_EXTENDS->"extends"|T_STATIC->"static"|T_ELSE->"else"|T_NEW->"new"|T_DELETE->"delete"|T_TYPEOF->"typeof"|T_VOID->"void"|T_ENUM->"enum"|T_EXPORT->"export"|T_IMPORT->"import"|T_SUPER->"super"|T_IMPLEMENTS->"implements"|T_INTERFACE->"interface"|T_PACKAGE->"package"|T_PRIVATE->"private"|T_PROTECTED->"protected"|T_PUBLIC->"public"|T_YIELD->"yield"|T_DEBUGGER->"debugger"|T_DECLARE->"declare"|T_TYPE->"type"|T_OPAQUE->"opaque"|T_OF->"of"|T_ASYNC->"async"|T_AWAIT->"await"|T_CHECKS->"%checks"|T_RSHIFT3_ASSIGN->">>>="|T_RSHIFT_ASSIGN->">>="|T_LSHIFT_ASSIGN->"<<="|T_BIT_XOR_ASSIGN->"^="|T_BIT_OR_ASSIGN->"|="|T_BIT_AND_ASSIGN->"&="|T_MOD_ASSIGN->"%="|T_DIV_ASSIGN->"/="|T_MULT_ASSIGN->"*="|T_EXP_ASSIGN->"**="|T_MINUS_ASSIGN->"-="|T_PLUS_ASSIGN->"+="|T_NULLISH_ASSIGN->"??="|T_AND_ASSIGN->"&&="|T_OR_ASSIGN->"||="|T_ASSIGN->"="|T_PLING_PERIOD->"?."|T_PLING_PLING->"??"|T_PLING->"?"|T_COLON->":"|T_OR->"||"|T_AND->"&&"|T_BIT_OR->"|"|T_BIT_XOR->"^"|T_BIT_AND->"&"|T_EQUAL->"=="|T_NOT_EQUAL->"!="|T_STRICT_EQUAL->"==="|T_STRICT_NOT_EQUAL->"!=="|T_LESS_THAN_EQUAL->"<="|T_GREATER_THAN_EQUAL->">="|T_LESS_THAN->"<"|T_GREATER_THAN->">"|T_LSHIFT->"<<"|T_RSHIFT->">>"|T_RSHIFT3->">>>"|T_PLUS->"+"|T_MINUS->"-"|T_DIV->"/"|T_MULT->"*"|T_EXP->"**"|T_MOD->"%"|T_NOT->"!"|T_BIT_NOT->"~"|T_INCR->"++"|T_DECR->"--"(* Extra tokens *)|T_ERRORraw->raw|T_EOF->""|T_JSX_IDENTIFIER{raw;_}->raw|T_JSX_TEXT(_,_,raw)->raw(* Type primitives *)|T_ANY_TYPE->"any"|T_MIXED_TYPE->"mixed"|T_EMPTY_TYPE->"empty"|T_BOOLEAN_TYPEkind->beginmatchkindwith|BOOL->"bool"|BOOLEAN->"boolean"end|T_NUMBER_TYPE->"number"|T_BIGINT_TYPE->"bigint"|T_NUMBER_SINGLETON_TYPE{raw;_}->raw|T_BIGINT_SINGLETON_TYPE{raw;_}->raw|T_STRING_TYPE->"string"|T_VOID_TYPE->"void"|T_SYMBOL_TYPE->"symbol"letquote_token_valuevalue=Printf.sprintf"token `%s`"valueletexplanation_of_token?(use_article=false)token=let(value,article)=matchtokenwith|T_NUMBER_SINGLETON_TYPE_|T_NUMBER_->("number","a")|T_BIGINT_SINGLETON_TYPE_|T_BIGINT_->("bigint","a")|T_JSX_TEXT_|T_STRING_->("string","a")|T_TEMPLATE_PART_->("template literal part","a")|T_JSX_IDENTIFIER_|T_IDENTIFIER_->("identifier","an")|T_REGEXP_->("regexp","a")|T_EOF->("end of input","the")|_->(quote_token_value(value_of_tokentoken),"the")inifuse_articlethenarticle^" "^valueelsevalue