123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387(* Js_of_ocaml compiler
* http://www.ocsigen.org/js_of_ocaml/
* Copyright (C) 2017 Hugo Heuzard
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, with linking exception;
* either version 2.1 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*)open!StdlibmoduleAnnot=structtypet=string*Primitive.tendtypet=|T_NUMBERof(number_type*string)|T_BIGINTof(bigint_type*string)|T_STRINGof(Utf8_string.t*int)|T_IDENTIFIERof(Utf8_string.t*string)|T_REGEXPof(Utf8_string.t*string)(* /pattern/flags *)(* Syntax *)|T_LCURLY|T_RCURLY|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_OF|T_ASYNC|T_AWAIT|T_GET|T_SET(* 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|T_FROM|T_TARGET|T_META|T_BACKQUOTE|T_DOLLARCURLY|T_ENCAPSED_STRINGofstring|T_AS(* Extra tokens *)|T_ERRORofstring|T_EOF|T_VIRTUAL_SEMICOLON|T_VIRTUAL_SEMICOLON_DO_WHILE|T_VIRTUAL_SEMICOLON_EXPORT_DEFAULT|T_DECR_NB|T_INCR_NB|T_LPAREN_ARROW|TAnnotofAnnot.t|TCommentofstring|TCommentLineDirectiveofstringandnumber_type=|BINARY|LEGACY_OCTAL|LEGACY_NON_OCTAL(* NonOctalDecimalIntegerLiteral in Annex B *)|OCTAL|NORMALandbigint_type=|BIG_BINARY|BIG_OCTAL|BIG_NORMALtypetoken=tletto_string=function|TAnnot(s,_)->s|T_ERRORs->s|TComments->s|TCommentLineDirectives->s|T_NUMBER(_,raw)->raw|T_IDENTIFIER(Utf8_,s)->s|T_STRING(Utf8s,_)->Printf.sprintf"%S"s|T_REGEXP(Utf8s,flags)->Printf.sprintf"/%s/%s"sflags|T_DEBUGGER->"debugger"|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_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_ELSE->"else"|T_NEW->"new"|T_LCURLY->"{"|T_RCURLY->"}"|T_LPAREN->"("|T_RPAREN->")"|T_LBRACKET->"["|T_RBRACKET->"]"|T_SEMICOLON->";"|T_COMMA->","|T_PERIOD->"."|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_MINUS_ASSIGN->"-="|T_PLUS_ASSIGN->"+="|T_ASSIGN->"="|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_MOD->"%"|T_ELLIPSIS->"..."|T_NOT->"!"|T_BIT_NOT->"~"|T_INCR->"++"|T_DECR->"--"|T_INCR_NB->"++"|T_DECR_NB->"--"|T_DELETE->"delete"|T_TYPEOF->"typeof"|T_VOID->"void"|T_VIRTUAL_SEMICOLON->";"|T_VIRTUAL_SEMICOLON_DO_WHILE->";"|T_VIRTUAL_SEMICOLON_EXPORT_DEFAULT->";"|T_ARROW->"=>"|T_AT->"@"|T_POUND->"#"|T_CONST->"const"|T_LET->"let"|T_CLASS->"class"|T_EXTENDS->"extends"|T_STATIC->"static"|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_OF->"of"|T_ASYNC->"async"|T_AWAIT->"await"|T_GET->"get"|T_SET->"set"|T_FROM->"from"|T_TARGET->"target"|T_META->"meta"|T_EXP_ASSIGN->"**="|T_NULLISH_ASSIGN->"??="|T_AND_ASSIGN->"&&="|T_OR_ASSIGN->"||="|T_PLING_PERIOD->"?."|T_PLING_PLING->"??"|T_EXP->"**"|T_EOF->""|T_BIGINT(_,raw)->raw|T_LPAREN_ARROW->"("|T_BACKQUOTE->"`"|T_DOLLARCURLY->"${"|T_ENCAPSED_STRINGs->s|T_AS->"as"letto_string_extrax=to_stringx^matchxwith|T_IDENTIFIER_->" (identifier)"|T_INCR_NB->" (INCR_NB)"|T_INCR->" (INCR)"|T_DECR_NB->" (DECR_NB)"|T_DECR->" (DECR)"|T_VIRTUAL_SEMICOLON->" (virtual)"|T_VIRTUAL_SEMICOLON_DO_WHILE->" (virtual-do-while)"|T_VIRTUAL_SEMICOLON_EXPORT_DEFAULT->" (virtual-export-default)"|TAnnot_->"(annot)"|T_ERROR_->"(error)"|T_LPAREN_ARROW->"(arrow)"|T_ENCAPSED_STRING_->"(encaps)"|_->""letis_keywords=matchswith|"async"->SomeT_ASYNC|"await"->SomeT_AWAIT|"break"->SomeT_BREAK|"case"->SomeT_CASE|"catch"->SomeT_CATCH|"class"->SomeT_CLASS|"const"->SomeT_CONST|"continue"->SomeT_CONTINUE|"debugger"->SomeT_DEBUGGER|"default"->SomeT_DEFAULT|"delete"->SomeT_DELETE|"do"->SomeT_DO|"else"->SomeT_ELSE|"enum"->SomeT_ENUM|"export"->SomeT_EXPORT|"extends"->SomeT_EXTENDS|"false"->SomeT_FALSE|"finally"->SomeT_FINALLY|"for"->SomeT_FOR|"function"->SomeT_FUNCTION|"if"->SomeT_IF|"implements"->SomeT_IMPLEMENTS|"import"->SomeT_IMPORT|"in"->SomeT_IN|"instanceof"->SomeT_INSTANCEOF|"interface"->SomeT_INTERFACE|"let"->SomeT_LET|"new"->SomeT_NEW|"null"->SomeT_NULL|"of"->SomeT_OF|"package"->SomeT_PACKAGE|"private"->SomeT_PRIVATE|"protected"->SomeT_PROTECTED|"public"->SomeT_PUBLIC|"return"->SomeT_RETURN|"static"->SomeT_STATIC|"super"->SomeT_SUPER|"switch"->SomeT_SWITCH|"this"->SomeT_THIS|"throw"->SomeT_THROW|"true"->SomeT_TRUE|"try"->SomeT_TRY|"typeof"->SomeT_TYPEOF|"var"->SomeT_VAR|"void"->SomeT_VOID|"while"->SomeT_WHILE|"with"->SomeT_WITH|"yield"->SomeT_YIELD|"get"->SomeT_GET|"set"->SomeT_SET|"from"->SomeT_FROM|"target"->SomeT_TARGET|"meta"->SomeT_META|"as"->SomeT_AS|_->None