From 56d6a69c5344a81561e73d977d58795b648f1ec7 Mon Sep 17 00:00:00 2001 From: Hugo Heuzard Date: Thu, 2 Apr 2020 16:38:06 +0200 Subject: [PATCH] part 2 --- compiler/lib/annot_lexer.ml | 1412 +++++++++-------- compiler/lib/annot_lexer.mll | 4 +- compiler/lib/annot_parser.ml | 949 ++++++----- compiler/lib/annot_parser.mli | 2 + compiler/lib/annot_parser.mly | 8 +- compiler/lib/config.ml | 2 +- compiler/lib/generate.ml | 46 +- compiler/lib/linker.ml | 115 +- compiler/lib/linker.mli | 1 + compiler/lib/parse_bytecode.ml | 6 +- compiler/lib/primitive.ml | 6 + compiler/lib/primitive.mli | 6 + compiler/lib/specialize_js.ml | 2 +- compiler/lib/var_printer.ml | 5 + compiler/tests-compiler/obj_dup.ml | 28 + compiler/tests-compiler/static_eval.ml | 34 +- .../variable_declaration_output.ml | 30 + lib/js_of_ocaml/js.ml | 6 +- lib/js_of_ocaml/js.mli | 6 +- lib/js_of_ocaml/js_of_ocaml_stubs.c | 24 +- lib/js_of_ocaml/json.ml | 12 +- runtime/dune | 4 +- runtime/fs.js | 12 +- runtime/fs_fake.js | 10 +- runtime/graphics.js | 4 +- runtime/ieee_754.js | 8 +- runtime/io.js | 12 +- runtime/jslib_js_of_ocaml.js | 11 +- runtime/lexing.js | 6 +- runtime/marshal.js | 5 +- runtime/md5.js | 35 +- runtime/{mlString.js => mlBytes.js} | 367 ++++- runtime/stdlib.js | 61 +- tools/travis.sh | 2 +- 34 files changed, 1930 insertions(+), 1311 deletions(-) rename runtime/{mlString.js => mlBytes.js} (71%) diff --git a/compiler/lib/annot_lexer.ml b/compiler/lib/annot_lexer.ml index 54bf6bfc78..d78f69ce66 100644 --- a/compiler/lib/annot_lexer.ml +++ b/compiler/lib/annot_lexer.ml @@ -23,34 +23,35 @@ open Annot_parser # 24 "compiler/lib/annot_lexer.ml" let __ocaml_lex_tables = { Lexing.lex_base = - "\000\000\231\255\232\255\233\255\002\000\235\255\002\000\003\000\ - \240\255\241\255\242\255\243\255\077\000\088\000\192\000\023\001\ - \110\001\197\001\028\002\115\002\202\002\033\003\120\003\207\003\ - \038\004\125\004\212\004\043\005\130\005\217\005\048\006\135\006\ - \222\006\053\007\140\007\227\007\058\008\145\008\232\008\063\009\ - \150\009\237\009\068\010\155\010\242\010\073\011\160\011\247\011\ - \078\012\165\012\252\012\083\013\170\013\001\014\088\014\175\014\ - \006\015\093\015\180\015\011\016\098\016\185\016\016\017\103\017\ - \190\017\021\018\108\018\195\018\026\019\113\019\200\019\031\020\ - \118\020\205\020\036\021\123\021\210\021\041\022\128\022\215\022\ - \046\023\133\023\220\023\051\024\163\000\181\000\239\255\236\255\ - "; + "\000\000\229\255\230\255\231\255\002\000\233\255\002\000\003\000\ + \238\255\239\255\240\255\241\255\077\000\099\000\244\255\192\000\ + \023\001\110\001\197\001\028\002\115\002\202\002\033\003\120\003\ + \207\003\038\004\125\004\212\004\043\005\130\005\217\005\048\006\ + \135\006\222\006\053\007\140\007\227\007\058\008\145\008\232\008\ + \063\009\150\009\237\009\068\010\155\010\242\010\073\011\160\011\ + \247\011\078\012\165\012\252\012\083\013\170\013\001\014\088\014\ + \175\014\006\015\093\015\180\015\011\016\098\016\185\016\016\017\ + \103\017\190\017\021\018\108\018\195\018\026\019\113\019\200\019\ + \031\020\118\020\205\020\036\021\123\021\210\021\041\022\128\022\ + \215\022\046\023\133\023\220\023\051\024\138\024\225\024\044\025\ + \056\025\237\255\234\255"; Lexing.lex_backtrk = - "\255\255\255\255\255\255\255\255\021\000\255\255\018\000\017\000\ - \255\255\255\255\255\255\255\255\011\000\010\000\010\000\010\000\ - \010\000\010\000\010\000\010\000\010\000\010\000\010\000\010\000\ - \010\000\010\000\010\000\010\000\010\000\000\000\010\000\010\000\ - \010\000\010\000\010\000\010\000\001\000\010\000\010\000\002\000\ - \010\000\010\000\010\000\003\000\010\000\010\000\010\000\010\000\ - \010\000\010\000\004\000\010\000\005\000\010\000\010\000\010\000\ - \010\000\010\000\006\000\010\000\010\000\010\000\010\000\010\000\ - \010\000\010\000\010\000\010\000\010\000\010\000\010\000\007\000\ - \010\000\010\000\010\000\010\000\010\000\008\000\010\000\010\000\ - \010\000\010\000\010\000\009\000\255\255\011\000\255\255\255\255\ - "; + "\255\255\255\255\255\255\255\255\023\000\255\255\020\000\019\000\ + \255\255\255\255\255\255\255\255\013\000\012\000\255\255\012\000\ + \012\000\012\000\012\000\012\000\012\000\012\000\012\000\012\000\ + \012\000\012\000\012\000\012\000\012\000\012\000\012\000\000\000\ + \012\000\012\000\012\000\012\000\012\000\012\000\001\000\012\000\ + \012\000\002\000\012\000\012\000\012\000\003\000\012\000\012\000\ + \012\000\012\000\012\000\012\000\004\000\012\000\005\000\012\000\ + \012\000\012\000\012\000\012\000\006\000\012\000\012\000\012\000\ + \012\000\012\000\012\000\012\000\012\000\012\000\012\000\012\000\ + \012\000\007\000\012\000\012\000\012\000\012\000\012\000\008\000\ + \012\000\012\000\012\000\012\000\012\000\009\000\010\000\255\255\ + \013\000\255\255\255\255"; Lexing.lex_default = "\001\000\000\000\000\000\000\000\255\255\000\000\255\255\255\255\ - \000\000\000\000\000\000\000\000\255\255\255\255\255\255\255\255\ + \000\000\000\000\000\000\000\000\255\255\255\255\000\000\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ @@ -59,94 +60,93 @@ let __ocaml_lex_tables = { \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\000\000\000\000\ - "; + \255\255\000\000\000\000"; Lexing.lex_trans = "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \000\000\004\000\002\000\004\000\000\000\000\000\000\000\000\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \004\000\000\000\004\000\000\000\013\000\000\000\000\000\000\000\ + \004\000\014\000\004\000\000\000\013\000\000\000\000\000\000\000\ \011\000\010\000\000\000\000\000\009\000\000\000\000\000\000\000\ \012\000\012\000\012\000\012\000\012\000\012\000\012\000\012\000\ - \012\000\012\000\008\000\000\000\007\000\005\000\006\000\087\000\ - \086\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ - \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ - \022\000\013\000\021\000\013\000\013\000\013\000\015\000\014\000\ + \012\000\012\000\008\000\000\000\007\000\005\000\006\000\090\000\ + \089\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ + \013\000\015\000\013\000\013\000\013\000\013\000\013\000\013\000\ + \024\000\013\000\023\000\013\000\013\000\013\000\017\000\016\000\ \013\000\013\000\013\000\000\000\000\000\000\000\000\000\013\000\ - \000\000\013\000\013\000\019\000\013\000\013\000\013\000\013\000\ - \013\000\013\000\013\000\013\000\013\000\018\000\013\000\016\000\ - \020\000\013\000\013\000\017\000\013\000\013\000\013\000\013\000\ - \013\000\013\000\013\000\084\000\013\000\012\000\012\000\012\000\ - \012\000\012\000\012\000\012\000\012\000\012\000\012\000\000\000\ - \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ - \013\000\013\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ + \000\000\013\000\013\000\021\000\013\000\013\000\013\000\013\000\ + \013\000\013\000\013\000\013\000\013\000\020\000\013\000\018\000\ + \022\000\013\000\013\000\019\000\013\000\013\000\013\000\013\000\ + \013\000\013\000\013\000\087\000\000\000\012\000\012\000\012\000\ + \012\000\012\000\012\000\012\000\012\000\012\000\012\000\013\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \013\000\000\000\000\000\013\000\013\000\013\000\013\000\013\000\ + \013\000\013\000\013\000\013\000\013\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ - \013\000\013\000\013\000\000\000\000\000\000\000\000\000\013\000\ - \000\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ + \013\000\013\000\013\000\013\000\013\000\013\000\000\000\000\000\ + \000\000\000\000\013\000\000\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ - \013\000\013\000\013\000\085\000\085\000\085\000\085\000\085\000\ - \085\000\085\000\085\000\085\000\085\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\084\000\013\000\085\000\085\000\085\000\ - \085\000\085\000\085\000\085\000\085\000\085\000\085\000\000\000\ + \013\000\013\000\013\000\013\000\013\000\013\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\013\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\013\000\000\000\000\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\000\000\000\000\000\000\000\000\000\000\000\000\ \003\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\000\000\000\000\000\000\000\000\013\000\ - \000\000\013\000\013\000\013\000\013\000\078\000\013\000\013\000\ + \000\000\013\000\013\000\013\000\013\000\013\000\086\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\013\000\ + \000\000\000\000\000\000\000\000\013\000\000\000\000\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\000\000\000\000\000\000\000\000\013\000\000\000\ - \013\000\013\000\013\000\013\000\072\000\013\000\013\000\013\000\ + \013\000\013\000\013\000\013\000\080\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\013\000\013\000\ + \000\000\000\000\000\000\013\000\000\000\000\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\000\000\000\000\000\000\000\000\013\000\000\000\013\000\ - \059\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ + \013\000\013\000\013\000\074\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\013\000\013\000\013\000\ + \000\000\000\000\013\000\000\000\000\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\000\000\ \000\000\000\000\000\000\000\000\000\000\000\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ - \000\000\000\000\000\000\000\000\013\000\000\000\013\000\013\000\ - \013\000\013\000\013\000\013\000\013\000\053\000\013\000\013\000\ + \000\000\000\000\000\000\000\000\013\000\000\000\013\000\061\000\ + \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\013\000\013\000\013\000\013\000\ + \000\000\013\000\000\000\000\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\000\000\000\000\ \000\000\000\000\000\000\000\000\000\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\000\000\ \000\000\000\000\000\000\013\000\000\000\013\000\013\000\013\000\ + \013\000\013\000\013\000\013\000\055\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ - \013\000\044\000\013\000\013\000\013\000\013\000\013\000\013\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\013\000\013\000\013\000\013\000\013\000\ + \013\000\000\000\000\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\000\000\000\000\000\000\ \000\000\000\000\000\000\000\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ @@ -154,9 +154,9 @@ let __ocaml_lex_tables = { \013\000\013\000\013\000\013\000\013\000\013\000\000\000\000\000\ \000\000\000\000\013\000\000\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ - \013\000\013\000\040\000\013\000\013\000\013\000\013\000\013\000\ - \013\000\013\000\013\000\013\000\013\000\013\000\013\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ + \046\000\013\000\013\000\013\000\013\000\013\000\013\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\013\000\ \000\000\000\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\000\000\000\000\000\000\000\000\ \000\000\000\000\000\000\013\000\013\000\013\000\013\000\013\000\ @@ -165,31 +165,31 @@ let __ocaml_lex_tables = { \013\000\013\000\013\000\013\000\013\000\000\000\000\000\000\000\ \000\000\013\000\000\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ - \013\000\013\000\013\000\013\000\013\000\013\000\013\000\037\000\ + \013\000\042\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\013\000\000\000\ \000\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\000\000\000\000\000\000\000\000\000\000\ \000\000\000\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\000\000\000\000\000\000\000\000\ - \013\000\000\000\013\000\013\000\013\000\013\000\030\000\013\000\ - \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ + \013\000\000\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ + \013\000\013\000\013\000\013\000\013\000\013\000\039\000\013\000\ \013\000\013\000\013\000\013\000\013\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\013\000\000\000\000\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\000\000\000\000\000\000\000\000\000\000\000\000\ \000\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\000\000\000\000\000\000\000\000\013\000\ - \000\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ + \000\000\013\000\013\000\013\000\013\000\032\000\013\000\013\000\ + \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ - \013\000\013\000\023\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\013\000\ + \000\000\000\000\000\000\000\000\013\000\000\000\000\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ @@ -197,10 +197,10 @@ let __ocaml_lex_tables = { \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\000\000\000\000\000\000\000\000\013\000\000\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ - \013\000\013\000\013\000\013\000\013\000\013\000\024\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ + \013\000\025\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\013\000\013\000\ + \000\000\000\000\000\000\013\000\000\000\000\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ @@ -208,53 +208,53 @@ let __ocaml_lex_tables = { \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\000\000\000\000\000\000\000\000\013\000\000\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ + \013\000\013\000\013\000\013\000\013\000\026\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ - \013\000\013\000\013\000\013\000\025\000\013\000\013\000\013\000\ \013\000\013\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\013\000\013\000\013\000\ + \000\000\000\000\013\000\000\000\000\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\000\000\ \000\000\000\000\000\000\000\000\000\000\000\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \000\000\000\000\000\000\000\000\013\000\000\000\013\000\013\000\ - \013\000\013\000\013\000\013\000\013\000\013\000\026\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ + \013\000\013\000\013\000\027\000\013\000\013\000\013\000\013\000\ \013\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\013\000\013\000\013\000\013\000\ + \000\000\013\000\000\000\000\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\000\000\000\000\ \000\000\000\000\000\000\000\000\000\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\000\000\ \000\000\000\000\000\000\013\000\000\000\013\000\013\000\013\000\ - \027\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ + \013\000\013\000\013\000\013\000\013\000\028\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\013\000\013\000\013\000\013\000\013\000\ + \013\000\000\000\000\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\000\000\000\000\000\000\ \000\000\000\000\000\000\000\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\000\000\000\000\ - \000\000\000\000\013\000\000\000\013\000\013\000\013\000\013\000\ - \028\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ + \000\000\000\000\013\000\000\000\013\000\013\000\013\000\029\000\ + \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\013\000\ \000\000\000\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\000\000\000\000\000\000\000\000\ \000\000\000\000\000\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\000\000\000\000\000\000\ - \000\000\013\000\000\000\013\000\013\000\013\000\013\000\013\000\ + \000\000\013\000\000\000\013\000\013\000\013\000\013\000\030\000\ + \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ - \013\000\013\000\013\000\013\000\013\000\029\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\013\000\000\000\ \000\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\000\000\000\000\000\000\000\000\000\000\ \000\000\000\000\013\000\013\000\013\000\013\000\013\000\013\000\ @@ -263,9 +263,9 @@ let __ocaml_lex_tables = { \013\000\013\000\013\000\013\000\000\000\000\000\000\000\000\000\ \013\000\000\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ - \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ + \013\000\013\000\013\000\013\000\031\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\013\000\000\000\000\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\000\000\000\000\000\000\000\000\000\000\000\000\ \000\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ @@ -274,9 +274,9 @@ let __ocaml_lex_tables = { \013\000\013\000\013\000\000\000\000\000\000\000\000\000\013\000\ \000\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ - \013\000\031\000\013\000\013\000\013\000\013\000\013\000\013\000\ + \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\013\000\ + \000\000\000\000\000\000\000\000\013\000\000\000\000\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ @@ -285,52 +285,52 @@ let __ocaml_lex_tables = { \013\000\013\000\000\000\000\000\000\000\000\000\013\000\000\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ - \013\000\013\000\013\000\013\000\032\000\013\000\013\000\013\000\ + \033\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\013\000\013\000\ + \000\000\000\000\000\000\013\000\000\000\000\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\000\000\000\000\000\000\000\000\013\000\000\000\013\000\ - \013\000\013\000\013\000\013\000\013\000\013\000\013\000\033\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ + \013\000\013\000\013\000\034\000\013\000\013\000\013\000\013\000\ \013\000\013\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\013\000\013\000\013\000\ + \000\000\000\000\013\000\000\000\000\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\000\000\ \000\000\000\000\000\000\000\000\000\000\000\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \000\000\000\000\000\000\000\000\013\000\000\000\013\000\013\000\ + \013\000\013\000\013\000\013\000\013\000\013\000\035\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ - \013\000\013\000\013\000\013\000\013\000\013\000\013\000\034\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\013\000\013\000\013\000\013\000\ + \000\000\013\000\000\000\000\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\000\000\000\000\ \000\000\000\000\000\000\000\000\000\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\000\000\ \000\000\000\000\000\000\013\000\000\000\013\000\013\000\013\000\ - \013\000\035\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ + \013\000\013\000\013\000\013\000\013\000\013\000\036\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\013\000\013\000\013\000\013\000\013\000\ + \013\000\000\000\000\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\000\000\000\000\000\000\ \000\000\000\000\000\000\000\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\000\000\000\000\ \000\000\000\000\013\000\000\000\013\000\013\000\013\000\013\000\ + \037\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ - \013\000\013\000\013\000\013\000\013\000\013\000\036\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\013\000\ \000\000\000\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\000\000\000\000\000\000\000\000\ \000\000\000\000\000\000\013\000\013\000\013\000\013\000\013\000\ @@ -339,9 +339,9 @@ let __ocaml_lex_tables = { \013\000\013\000\013\000\013\000\013\000\000\000\000\000\000\000\ \000\000\013\000\000\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ - \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ + \013\000\013\000\013\000\013\000\013\000\038\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\013\000\000\000\ \000\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\000\000\000\000\000\000\000\000\000\000\ \000\000\000\000\013\000\013\000\013\000\013\000\013\000\013\000\ @@ -350,31 +350,31 @@ let __ocaml_lex_tables = { \013\000\013\000\013\000\013\000\000\000\000\000\000\000\000\000\ \013\000\000\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ - \013\000\013\000\013\000\038\000\013\000\013\000\013\000\013\000\ + \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\013\000\000\000\000\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\000\000\000\000\000\000\000\000\000\000\000\000\ \000\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\000\000\000\000\000\000\000\000\013\000\ - \000\000\013\000\013\000\013\000\013\000\039\000\013\000\013\000\ - \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ + \000\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ + \013\000\013\000\040\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\013\000\ + \000\000\000\000\000\000\000\000\013\000\000\000\000\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\000\000\000\000\000\000\000\000\013\000\000\000\ - \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ + \013\000\013\000\013\000\013\000\041\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\013\000\013\000\ + \000\000\000\000\000\000\013\000\000\000\000\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ @@ -382,10 +382,10 @@ let __ocaml_lex_tables = { \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\000\000\000\000\000\000\000\000\013\000\000\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ - \013\000\013\000\013\000\013\000\041\000\013\000\013\000\013\000\ + \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\013\000\013\000\013\000\ + \000\000\000\000\013\000\000\000\000\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\000\000\ \000\000\000\000\000\000\000\000\000\000\000\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ @@ -393,10 +393,10 @@ let __ocaml_lex_tables = { \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \000\000\000\000\000\000\000\000\013\000\000\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ + \013\000\013\000\013\000\043\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ - \042\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\013\000\013\000\013\000\013\000\ + \000\000\013\000\000\000\000\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\000\000\000\000\ \000\000\000\000\000\000\000\000\000\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ @@ -404,10 +404,10 @@ let __ocaml_lex_tables = { \013\000\013\000\013\000\013\000\013\000\013\000\013\000\000\000\ \000\000\000\000\000\000\013\000\000\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ + \013\000\013\000\013\000\013\000\013\000\013\000\013\000\044\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ - \043\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\013\000\013\000\013\000\013\000\013\000\ + \013\000\000\000\000\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\000\000\000\000\000\000\ \000\000\000\000\000\000\000\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ @@ -415,9 +415,9 @@ let __ocaml_lex_tables = { \013\000\013\000\013\000\013\000\013\000\013\000\000\000\000\000\ \000\000\000\000\013\000\000\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ - \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ + \013\000\013\000\013\000\013\000\013\000\013\000\013\000\045\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\013\000\ \000\000\000\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\000\000\000\000\000\000\000\000\ \000\000\000\000\000\000\013\000\013\000\013\000\013\000\013\000\ @@ -426,42 +426,42 @@ let __ocaml_lex_tables = { \013\000\013\000\013\000\013\000\013\000\000\000\000\000\000\000\ \000\000\013\000\000\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ - \013\000\013\000\013\000\013\000\013\000\013\000\045\000\013\000\ + \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\013\000\000\000\ \000\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\000\000\000\000\000\000\000\000\000\000\ \000\000\000\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\000\000\000\000\000\000\000\000\ - \013\000\000\000\046\000\013\000\013\000\013\000\013\000\013\000\ - \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ + \013\000\000\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ + \013\000\013\000\013\000\013\000\013\000\047\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\013\000\000\000\000\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\000\000\000\000\000\000\000\000\000\000\000\000\ \000\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\000\000\000\000\000\000\000\000\013\000\ - \000\000\013\000\048\000\013\000\013\000\013\000\013\000\013\000\ + \000\000\048\000\013\000\013\000\013\000\013\000\013\000\013\000\ + \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ - \013\000\013\000\013\000\013\000\047\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\013\000\ + \000\000\000\000\000\000\000\000\013\000\000\000\000\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\000\000\000\000\000\000\000\000\013\000\000\000\ + \013\000\050\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ - \013\000\013\000\013\000\013\000\013\000\013\000\051\000\013\000\ - \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ + \013\000\013\000\013\000\049\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\013\000\013\000\ + \000\000\000\000\000\000\013\000\000\000\000\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ @@ -469,32 +469,32 @@ let __ocaml_lex_tables = { \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\000\000\000\000\000\000\000\000\013\000\000\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ - \013\000\013\000\049\000\013\000\013\000\013\000\013\000\013\000\ + \013\000\013\000\013\000\013\000\013\000\053\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\013\000\013\000\013\000\ + \000\000\000\000\013\000\000\000\000\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\000\000\ \000\000\000\000\000\000\000\000\000\000\000\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \000\000\000\000\000\000\000\000\013\000\000\000\013\000\013\000\ - \013\000\013\000\050\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ + \013\000\051\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\013\000\013\000\013\000\013\000\ + \000\000\013\000\000\000\000\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\000\000\000\000\ \000\000\000\000\000\000\000\000\000\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\000\000\ \000\000\000\000\000\000\013\000\000\000\013\000\013\000\013\000\ - \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ + \013\000\052\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\013\000\013\000\013\000\013\000\013\000\ + \013\000\000\000\000\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\000\000\000\000\000\000\ \000\000\000\000\000\000\000\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ @@ -502,9 +502,9 @@ let __ocaml_lex_tables = { \013\000\013\000\013\000\013\000\013\000\013\000\000\000\000\000\ \000\000\000\000\013\000\000\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ - \013\000\013\000\013\000\013\000\013\000\052\000\013\000\013\000\ + \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\013\000\ \000\000\000\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\000\000\000\000\000\000\000\000\ \000\000\000\000\000\000\013\000\013\000\013\000\013\000\013\000\ @@ -513,31 +513,31 @@ let __ocaml_lex_tables = { \013\000\013\000\013\000\013\000\013\000\000\000\000\000\000\000\ \000\000\013\000\000\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ - \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ + \013\000\013\000\013\000\013\000\054\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\013\000\000\000\ \000\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\000\000\000\000\000\000\000\000\000\000\ \000\000\000\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\000\000\000\000\000\000\000\000\ - \013\000\000\000\054\000\013\000\013\000\013\000\013\000\013\000\ + \013\000\000\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\013\000\000\000\000\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\000\000\000\000\000\000\000\000\000\000\000\000\ \000\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\000\000\000\000\000\000\000\000\013\000\ - \000\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ - \013\000\013\000\013\000\013\000\055\000\013\000\013\000\013\000\ + \000\000\056\000\013\000\013\000\013\000\013\000\013\000\013\000\ + \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\013\000\ + \000\000\000\000\000\000\000\000\013\000\000\000\000\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ @@ -545,10 +545,10 @@ let __ocaml_lex_tables = { \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\000\000\000\000\000\000\000\000\013\000\000\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ - \013\000\013\000\013\000\056\000\013\000\013\000\013\000\013\000\ + \013\000\013\000\013\000\057\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\013\000\013\000\ + \000\000\000\000\000\000\013\000\000\000\000\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ @@ -556,10 +556,10 @@ let __ocaml_lex_tables = { \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\000\000\000\000\000\000\000\000\013\000\000\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ - \013\000\013\000\013\000\013\000\013\000\057\000\013\000\013\000\ + \013\000\013\000\058\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\013\000\013\000\013\000\ + \000\000\000\000\013\000\000\000\000\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\000\000\ \000\000\000\000\000\000\000\000\000\000\000\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ @@ -567,10 +567,10 @@ let __ocaml_lex_tables = { \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \000\000\000\000\000\000\000\000\013\000\000\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ + \013\000\013\000\013\000\013\000\059\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ - \013\000\013\000\013\000\013\000\058\000\013\000\013\000\013\000\ \013\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\013\000\013\000\013\000\013\000\ + \000\000\013\000\000\000\000\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\000\000\000\000\ \000\000\000\000\000\000\000\000\000\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ @@ -579,139 +579,139 @@ let __ocaml_lex_tables = { \000\000\000\000\000\000\013\000\000\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ - \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ + \013\000\013\000\013\000\060\000\013\000\013\000\013\000\013\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\013\000\013\000\013\000\013\000\013\000\ + \013\000\000\000\000\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\000\000\000\000\000\000\ \000\000\000\000\000\000\000\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\000\000\000\000\ \000\000\000\000\013\000\000\000\013\000\013\000\013\000\013\000\ - \013\000\013\000\013\000\013\000\013\000\060\000\013\000\013\000\ + \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\013\000\ \000\000\000\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\000\000\000\000\000\000\000\000\ \000\000\000\000\000\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\000\000\000\000\000\000\ - \000\000\013\000\000\000\013\000\013\000\013\000\013\000\061\000\ - \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ + \000\000\013\000\000\000\013\000\013\000\013\000\013\000\013\000\ + \013\000\013\000\013\000\013\000\062\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\013\000\000\000\ \000\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\000\000\000\000\000\000\000\000\000\000\ \000\000\000\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\000\000\000\000\000\000\000\000\ - \013\000\000\000\013\000\013\000\062\000\013\000\013\000\013\000\ + \013\000\000\000\013\000\013\000\013\000\013\000\063\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\013\000\000\000\000\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\000\000\000\000\000\000\000\000\000\000\000\000\ \000\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\000\000\000\000\000\000\000\000\013\000\ - \000\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ + \000\000\013\000\013\000\064\000\013\000\013\000\013\000\013\000\ + \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ - \013\000\013\000\013\000\013\000\063\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\013\000\ + \000\000\000\000\000\000\000\000\013\000\000\000\000\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ - \013\000\013\000\000\000\000\000\000\000\000\000\064\000\000\000\ - \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ + \013\000\013\000\000\000\000\000\000\000\000\000\013\000\000\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ + \013\000\013\000\013\000\065\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\013\000\013\000\ + \000\000\000\000\000\000\013\000\000\000\000\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ - \013\000\000\000\000\000\000\000\000\000\013\000\000\000\013\000\ + \013\000\000\000\000\000\000\000\000\000\066\000\000\000\013\000\ + \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ - \013\000\013\000\065\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\013\000\013\000\013\000\ + \000\000\000\000\013\000\000\000\000\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\000\000\ \000\000\000\000\000\000\000\000\000\000\000\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \000\000\000\000\000\000\000\000\013\000\000\000\013\000\013\000\ - \013\000\013\000\013\000\013\000\013\000\013\000\066\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ + \013\000\067\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\013\000\013\000\013\000\013\000\ + \000\000\013\000\000\000\000\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\000\000\000\000\ \000\000\000\000\000\000\000\000\000\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\000\000\ \000\000\000\000\000\000\013\000\000\000\013\000\013\000\013\000\ + \013\000\013\000\013\000\013\000\013\000\068\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ - \067\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\013\000\013\000\013\000\013\000\013\000\ + \013\000\000\000\000\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\000\000\000\000\000\000\ \000\000\000\000\000\000\000\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\000\000\000\000\ \000\000\000\000\013\000\000\000\013\000\013\000\013\000\013\000\ - \068\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ + \013\000\013\000\013\000\013\000\013\000\013\000\013\000\069\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\013\000\ \000\000\000\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\000\000\000\000\000\000\000\000\ \000\000\000\000\000\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\000\000\000\000\000\000\ - \000\000\013\000\000\000\013\000\013\000\013\000\013\000\013\000\ + \000\000\013\000\000\000\013\000\013\000\013\000\013\000\070\000\ + \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ - \013\000\013\000\013\000\013\000\069\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\013\000\000\000\ \000\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\000\000\000\000\000\000\000\000\000\000\ \000\000\000\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\000\000\000\000\000\000\000\000\ - \013\000\000\000\070\000\013\000\013\000\013\000\013\000\013\000\ - \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ + \013\000\000\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ + \013\000\013\000\013\000\071\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\013\000\000\000\000\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\000\000\000\000\000\000\000\000\000\000\000\000\ \000\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\000\000\000\000\000\000\000\000\013\000\ - \000\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ - \013\000\013\000\013\000\013\000\071\000\013\000\013\000\013\000\ + \000\000\072\000\013\000\013\000\013\000\013\000\013\000\013\000\ + \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\013\000\ + \000\000\000\000\000\000\000\000\013\000\000\000\000\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ @@ -719,10 +719,10 @@ let __ocaml_lex_tables = { \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\000\000\000\000\000\000\000\000\013\000\000\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ - \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ + \013\000\013\000\013\000\073\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\013\000\013\000\ + \000\000\000\000\000\000\013\000\000\000\000\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ @@ -731,9 +731,9 @@ let __ocaml_lex_tables = { \013\000\000\000\000\000\000\000\000\000\013\000\000\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ - \073\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ + \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\013\000\013\000\013\000\ + \000\000\000\000\013\000\000\000\000\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\000\000\ \000\000\000\000\000\000\000\000\000\000\000\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ @@ -741,31 +741,31 @@ let __ocaml_lex_tables = { \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \000\000\000\000\000\000\000\000\013\000\000\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ + \013\000\013\000\013\000\013\000\013\000\013\000\013\000\075\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ - \074\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\013\000\013\000\013\000\013\000\ + \000\000\013\000\000\000\000\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\000\000\000\000\ \000\000\000\000\000\000\000\000\000\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\000\000\ \000\000\000\000\000\000\013\000\000\000\013\000\013\000\013\000\ - \013\000\013\000\013\000\013\000\013\000\075\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ + \013\000\013\000\013\000\013\000\013\000\013\000\013\000\076\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\013\000\013\000\013\000\013\000\013\000\ + \013\000\000\000\000\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\000\000\000\000\000\000\ \000\000\000\000\000\000\000\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\000\000\000\000\ \000\000\000\000\013\000\000\000\013\000\013\000\013\000\013\000\ + \013\000\013\000\013\000\013\000\077\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ - \013\000\013\000\076\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\013\000\ \000\000\000\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\000\000\000\000\000\000\000\000\ \000\000\000\000\000\000\013\000\013\000\013\000\013\000\013\000\ @@ -774,9 +774,9 @@ let __ocaml_lex_tables = { \013\000\013\000\013\000\013\000\013\000\000\000\000\000\000\000\ \000\000\013\000\000\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ - \077\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ + \013\000\078\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\013\000\000\000\ \000\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\000\000\000\000\000\000\000\000\000\000\ \000\000\000\000\013\000\013\000\013\000\013\000\013\000\013\000\ @@ -784,74 +784,106 @@ let __ocaml_lex_tables = { \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\000\000\000\000\000\000\000\000\ \013\000\000\000\013\000\013\000\013\000\013\000\013\000\013\000\ - \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ + \013\000\013\000\013\000\013\000\013\000\013\000\013\000\079\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\013\000\000\000\000\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\000\000\000\000\000\000\000\000\000\000\000\000\ \000\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\000\000\000\000\000\000\000\000\013\000\ - \000\000\079\000\013\000\013\000\013\000\013\000\013\000\013\000\ + \000\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\000\000\013\000\ + \000\000\000\000\000\000\000\000\013\000\000\000\000\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\000\000\000\000\000\000\000\000\013\000\000\000\ + \081\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ - \013\000\013\000\080\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\000\000\013\000\013\000\ + \000\000\000\000\000\000\013\000\000\000\000\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\000\000\000\000\000\000\000\000\013\000\000\000\013\000\ - \013\000\013\000\081\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ + \013\000\082\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\000\000\013\000\013\000\013\000\ + \000\000\000\000\013\000\000\000\000\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\000\000\ \000\000\000\000\000\000\000\000\000\000\000\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \000\000\000\000\000\000\000\000\013\000\000\000\013\000\013\000\ - \013\000\013\000\082\000\013\000\013\000\013\000\013\000\013\000\ + \013\000\083\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000\013\000\013\000\013\000\013\000\ + \000\000\013\000\000\000\000\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\000\000\000\000\ \000\000\000\000\000\000\000\000\000\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\000\000\ \000\000\000\000\000\000\013\000\000\000\013\000\013\000\013\000\ - \013\000\013\000\083\000\013\000\013\000\013\000\013\000\013\000\ + \013\000\084\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\013\000\013\000\013\000\013\000\013\000\ + \013\000\000\000\000\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\000\000\000\000\000\000\ \000\000\000\000\000\000\000\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\000\000\000\000\ \000\000\000\000\013\000\000\000\013\000\013\000\013\000\013\000\ + \013\000\085\000\013\000\013\000\013\000\013\000\013\000\013\000\ + \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ + \013\000\013\000\013\000\013\000\013\000\013\000\013\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\013\000\ + \000\000\000\000\013\000\013\000\013\000\013\000\013\000\013\000\ + \013\000\013\000\013\000\013\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\013\000\013\000\013\000\013\000\013\000\ + \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ + \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ + \013\000\013\000\013\000\013\000\013\000\000\000\000\000\000\000\ + \000\000\013\000\000\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\013\000\000\000\ + \000\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ + \013\000\013\000\013\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\013\000\013\000\013\000\013\000\013\000\013\000\ + \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ + \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ + \013\000\013\000\013\000\013\000\000\000\000\000\000\000\000\000\ + \013\000\000\000\013\000\013\000\013\000\013\000\013\000\013\000\ + \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ + \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ + \013\000\013\000\013\000\013\000\088\000\088\000\088\000\088\000\ + \088\000\088\000\088\000\088\000\088\000\088\000\087\000\000\000\ + \088\000\088\000\088\000\088\000\088\000\088\000\088\000\088\000\ + \088\000\088\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ @@ -868,13 +900,14 @@ let __ocaml_lex_tables = { \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\000\000"; + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000"; Lexing.lex_check = "\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\000\000\000\000\004\000\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \000\000\255\255\004\000\255\255\000\000\255\255\255\255\255\255\ + \000\000\000\000\004\000\255\255\000\000\255\255\255\255\255\255\ \000\000\000\000\255\255\255\255\000\000\255\255\255\255\255\255\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \000\000\000\000\000\000\255\255\000\000\000\000\000\000\006\000\ @@ -885,781 +918,814 @@ let __ocaml_lex_tables = { \255\255\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ - \000\000\000\000\000\000\012\000\013\000\012\000\012\000\012\000\ - \012\000\012\000\012\000\012\000\012\000\012\000\012\000\255\255\ - \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ - \013\000\013\000\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ + \000\000\000\000\000\000\012\000\255\255\012\000\012\000\012\000\ + \012\000\012\000\012\000\012\000\012\000\012\000\012\000\013\000\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \013\000\255\255\255\255\013\000\013\000\013\000\013\000\013\000\ + \013\000\013\000\013\000\013\000\013\000\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ - \013\000\013\000\013\000\255\255\255\255\255\255\255\255\013\000\ - \255\255\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ + \013\000\013\000\013\000\013\000\013\000\013\000\255\255\255\255\ + \255\255\255\255\013\000\255\255\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ \013\000\013\000\013\000\013\000\013\000\013\000\013\000\013\000\ - \013\000\013\000\013\000\084\000\084\000\084\000\084\000\084\000\ - \084\000\084\000\084\000\084\000\084\000\255\255\255\255\255\255\ - \255\255\255\255\255\255\085\000\014\000\085\000\085\000\085\000\ - \085\000\085\000\085\000\085\000\085\000\085\000\085\000\255\255\ - \014\000\014\000\014\000\014\000\014\000\014\000\014\000\014\000\ - \014\000\014\000\255\255\255\255\255\255\255\255\255\255\255\255\ - \000\000\014\000\014\000\014\000\014\000\014\000\014\000\014\000\ - \014\000\014\000\014\000\014\000\014\000\014\000\014\000\014\000\ - \014\000\014\000\014\000\014\000\014\000\014\000\014\000\014\000\ - \014\000\014\000\014\000\255\255\255\255\255\255\255\255\014\000\ - \255\255\014\000\014\000\014\000\014\000\014\000\014\000\014\000\ - \014\000\014\000\014\000\014\000\014\000\014\000\014\000\014\000\ - \014\000\014\000\014\000\014\000\014\000\014\000\014\000\014\000\ - \014\000\014\000\014\000\015\000\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\015\000\ - \015\000\015\000\015\000\015\000\015\000\015\000\015\000\015\000\ - \015\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \015\000\015\000\015\000\015\000\015\000\015\000\015\000\015\000\ + \013\000\013\000\013\000\013\000\013\000\013\000\255\255\255\255\ + \255\255\255\255\255\255\255\255\015\000\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\015\000\255\255\255\255\ \015\000\015\000\015\000\015\000\015\000\015\000\015\000\015\000\ + \015\000\015\000\255\255\255\255\255\255\255\255\255\255\255\255\ + \000\000\015\000\015\000\015\000\015\000\015\000\015\000\015\000\ \015\000\015\000\015\000\015\000\015\000\015\000\015\000\015\000\ - \015\000\015\000\255\255\255\255\255\255\255\255\015\000\255\255\ \015\000\015\000\015\000\015\000\015\000\015\000\015\000\015\000\ + \015\000\015\000\015\000\255\255\255\255\255\255\255\255\015\000\ + \255\255\015\000\015\000\015\000\015\000\015\000\015\000\015\000\ \015\000\015\000\015\000\015\000\015\000\015\000\015\000\015\000\ \015\000\015\000\015\000\015\000\015\000\015\000\015\000\015\000\ - \015\000\015\000\016\000\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\016\000\016\000\ + \015\000\015\000\015\000\016\000\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\016\000\255\255\255\255\016\000\ \016\000\016\000\016\000\016\000\016\000\016\000\016\000\016\000\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\016\000\ + \016\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \016\000\016\000\016\000\016\000\016\000\016\000\016\000\016\000\ \016\000\016\000\016\000\016\000\016\000\016\000\016\000\016\000\ \016\000\016\000\016\000\016\000\016\000\016\000\016\000\016\000\ - \016\000\255\255\255\255\255\255\255\255\016\000\255\255\016\000\ + \016\000\016\000\255\255\255\255\255\255\255\255\016\000\255\255\ \016\000\016\000\016\000\016\000\016\000\016\000\016\000\016\000\ \016\000\016\000\016\000\016\000\016\000\016\000\016\000\016\000\ \016\000\016\000\016\000\016\000\016\000\016\000\016\000\016\000\ - \016\000\017\000\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\017\000\017\000\017\000\ - \017\000\017\000\017\000\017\000\017\000\017\000\017\000\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\017\000\017\000\ + \016\000\016\000\017\000\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\017\000\255\255\255\255\017\000\017\000\ \017\000\017\000\017\000\017\000\017\000\017\000\017\000\017\000\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\017\000\ \017\000\017\000\017\000\017\000\017\000\017\000\017\000\017\000\ \017\000\017\000\017\000\017\000\017\000\017\000\017\000\017\000\ - \255\255\255\255\255\255\255\255\017\000\255\255\017\000\017\000\ \017\000\017\000\017\000\017\000\017\000\017\000\017\000\017\000\ + \017\000\255\255\255\255\255\255\255\255\017\000\255\255\017\000\ \017\000\017\000\017\000\017\000\017\000\017\000\017\000\017\000\ \017\000\017\000\017\000\017\000\017\000\017\000\017\000\017\000\ - \018\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\018\000\018\000\018\000\018\000\ - \018\000\018\000\018\000\018\000\018\000\018\000\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\018\000\018\000\018\000\ + \017\000\017\000\017\000\017\000\017\000\017\000\017\000\017\000\ + \017\000\018\000\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\018\000\255\255\255\255\018\000\018\000\018\000\ + \018\000\018\000\018\000\018\000\018\000\018\000\018\000\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\018\000\018\000\ \018\000\018\000\018\000\018\000\018\000\018\000\018\000\018\000\ \018\000\018\000\018\000\018\000\018\000\018\000\018\000\018\000\ - \018\000\018\000\018\000\018\000\018\000\018\000\018\000\255\255\ - \255\255\255\255\255\255\018\000\255\255\018\000\018\000\018\000\ \018\000\018\000\018\000\018\000\018\000\018\000\018\000\018\000\ + \255\255\255\255\255\255\255\255\018\000\255\255\018\000\018\000\ \018\000\018\000\018\000\018\000\018\000\018\000\018\000\018\000\ - \018\000\018\000\018\000\018\000\018\000\018\000\018\000\019\000\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\019\000\019\000\019\000\019\000\019\000\ - \019\000\019\000\019\000\019\000\019\000\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\019\000\019\000\019\000\019\000\ + \018\000\018\000\018\000\018\000\018\000\018\000\018\000\018\000\ + \018\000\018\000\018\000\018\000\018\000\018\000\018\000\018\000\ + \019\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\019\000\255\255\255\255\019\000\019\000\019\000\019\000\ + \019\000\019\000\019\000\019\000\019\000\019\000\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\019\000\019\000\019\000\ \019\000\019\000\019\000\019\000\019\000\019\000\019\000\019\000\ \019\000\019\000\019\000\019\000\019\000\019\000\019\000\019\000\ - \019\000\019\000\019\000\019\000\019\000\019\000\255\255\255\255\ - \255\255\255\255\019\000\255\255\019\000\019\000\019\000\019\000\ + \019\000\019\000\019\000\019\000\019\000\019\000\019\000\255\255\ + \255\255\255\255\255\255\019\000\255\255\019\000\019\000\019\000\ \019\000\019\000\019\000\019\000\019\000\019\000\019\000\019\000\ \019\000\019\000\019\000\019\000\019\000\019\000\019\000\019\000\ - \019\000\019\000\019\000\019\000\019\000\019\000\020\000\255\255\ + \019\000\019\000\019\000\019\000\019\000\019\000\019\000\020\000\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\020\000\020\000\020\000\020\000\020\000\020\000\ - \020\000\020\000\020\000\020\000\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\020\000\020\000\020\000\020\000\020\000\ + \020\000\255\255\255\255\020\000\020\000\020\000\020\000\020\000\ + \020\000\020\000\020\000\020\000\020\000\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\020\000\020\000\020\000\020\000\ \020\000\020\000\020\000\020\000\020\000\020\000\020\000\020\000\ \020\000\020\000\020\000\020\000\020\000\020\000\020\000\020\000\ - \020\000\020\000\020\000\020\000\020\000\255\255\255\255\255\255\ - \255\255\020\000\255\255\020\000\020\000\020\000\020\000\020\000\ + \020\000\020\000\020\000\020\000\020\000\020\000\255\255\255\255\ + \255\255\255\255\020\000\255\255\020\000\020\000\020\000\020\000\ \020\000\020\000\020\000\020\000\020\000\020\000\020\000\020\000\ \020\000\020\000\020\000\020\000\020\000\020\000\020\000\020\000\ - \020\000\020\000\020\000\020\000\020\000\021\000\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\021\000\021\000\021\000\021\000\021\000\021\000\021\000\ - \021\000\021\000\021\000\255\255\255\255\255\255\255\255\255\255\ + \020\000\020\000\020\000\020\000\020\000\020\000\021\000\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\021\000\ \255\255\255\255\021\000\021\000\021\000\021\000\021\000\021\000\ + \021\000\021\000\021\000\021\000\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\021\000\021\000\021\000\021\000\021\000\ \021\000\021\000\021\000\021\000\021\000\021\000\021\000\021\000\ \021\000\021\000\021\000\021\000\021\000\021\000\021\000\021\000\ - \021\000\021\000\021\000\021\000\255\255\255\255\255\255\255\255\ - \021\000\255\255\021\000\021\000\021\000\021\000\021\000\021\000\ + \021\000\021\000\021\000\021\000\021\000\255\255\255\255\255\255\ + \255\255\021\000\255\255\021\000\021\000\021\000\021\000\021\000\ \021\000\021\000\021\000\021\000\021\000\021\000\021\000\021\000\ \021\000\021\000\021\000\021\000\021\000\021\000\021\000\021\000\ - \021\000\021\000\021\000\021\000\022\000\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\ - \022\000\022\000\255\255\255\255\255\255\255\255\255\255\255\255\ + \021\000\021\000\021\000\021\000\021\000\022\000\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\022\000\255\255\ \255\255\022\000\022\000\022\000\022\000\022\000\022\000\022\000\ + \022\000\022\000\022\000\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\022\000\022\000\022\000\022\000\022\000\022\000\ \022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\ \022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\ - \022\000\022\000\022\000\255\255\255\255\255\255\255\255\022\000\ - \255\255\022\000\022\000\022\000\022\000\022\000\022\000\022\000\ + \022\000\022\000\022\000\022\000\255\255\255\255\255\255\255\255\ + \022\000\255\255\022\000\022\000\022\000\022\000\022\000\022\000\ \022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\ \022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\ - \022\000\022\000\022\000\023\000\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\023\000\ + \022\000\022\000\022\000\022\000\023\000\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\023\000\255\255\255\255\ \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ - \023\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \023\000\023\000\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\255\255\255\255\255\255\255\255\023\000\ + \255\255\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ - \023\000\023\000\255\255\255\255\255\255\255\255\023\000\255\255\ \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ - \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ - \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ - \023\000\023\000\024\000\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\024\000\024\000\ + \023\000\023\000\023\000\024\000\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\024\000\255\255\255\255\024\000\ \024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\024\000\ + \024\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\ \024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\ \024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\ - \024\000\255\255\255\255\255\255\255\255\024\000\255\255\024\000\ + \024\000\024\000\255\255\255\255\255\255\255\255\024\000\255\255\ \024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\ \024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\ \024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\ - \024\000\025\000\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\025\000\025\000\025\000\ - \025\000\025\000\025\000\025\000\025\000\025\000\025\000\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\025\000\025\000\ + \024\000\024\000\025\000\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\025\000\255\255\255\255\025\000\025\000\ + \025\000\025\000\025\000\025\000\025\000\025\000\025\000\025\000\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\025\000\ \025\000\025\000\025\000\025\000\025\000\025\000\025\000\025\000\ \025\000\025\000\025\000\025\000\025\000\025\000\025\000\025\000\ \025\000\025\000\025\000\025\000\025\000\025\000\025\000\025\000\ - \255\255\255\255\255\255\255\255\025\000\255\255\025\000\025\000\ + \025\000\255\255\255\255\255\255\255\255\025\000\255\255\025\000\ \025\000\025\000\025\000\025\000\025\000\025\000\025\000\025\000\ \025\000\025\000\025\000\025\000\025\000\025\000\025\000\025\000\ \025\000\025\000\025\000\025\000\025\000\025\000\025\000\025\000\ - \026\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\026\000\026\000\026\000\026\000\ - \026\000\026\000\026\000\026\000\026\000\026\000\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\026\000\026\000\026\000\ + \025\000\026\000\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\026\000\255\255\255\255\026\000\026\000\026\000\ + \026\000\026\000\026\000\026\000\026\000\026\000\026\000\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\026\000\026\000\ \026\000\026\000\026\000\026\000\026\000\026\000\026\000\026\000\ \026\000\026\000\026\000\026\000\026\000\026\000\026\000\026\000\ - \026\000\026\000\026\000\026\000\026\000\026\000\026\000\255\255\ - \255\255\255\255\255\255\026\000\255\255\026\000\026\000\026\000\ \026\000\026\000\026\000\026\000\026\000\026\000\026\000\026\000\ + \255\255\255\255\255\255\255\255\026\000\255\255\026\000\026\000\ \026\000\026\000\026\000\026\000\026\000\026\000\026\000\026\000\ - \026\000\026\000\026\000\026\000\026\000\026\000\026\000\027\000\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\027\000\027\000\027\000\027\000\027\000\ - \027\000\027\000\027\000\027\000\027\000\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\027\000\027\000\027\000\027\000\ + \026\000\026\000\026\000\026\000\026\000\026\000\026\000\026\000\ + \026\000\026\000\026\000\026\000\026\000\026\000\026\000\026\000\ + \027\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\027\000\255\255\255\255\027\000\027\000\027\000\027\000\ + \027\000\027\000\027\000\027\000\027\000\027\000\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\027\000\027\000\027\000\ \027\000\027\000\027\000\027\000\027\000\027\000\027\000\027\000\ \027\000\027\000\027\000\027\000\027\000\027\000\027\000\027\000\ - \027\000\027\000\027\000\027\000\027\000\027\000\255\255\255\255\ - \255\255\255\255\027\000\255\255\027\000\027\000\027\000\027\000\ + \027\000\027\000\027\000\027\000\027\000\027\000\027\000\255\255\ + \255\255\255\255\255\255\027\000\255\255\027\000\027\000\027\000\ \027\000\027\000\027\000\027\000\027\000\027\000\027\000\027\000\ \027\000\027\000\027\000\027\000\027\000\027\000\027\000\027\000\ - \027\000\027\000\027\000\027\000\027\000\027\000\028\000\255\255\ + \027\000\027\000\027\000\027\000\027\000\027\000\027\000\028\000\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\028\000\028\000\028\000\028\000\028\000\028\000\ - \028\000\028\000\028\000\028\000\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\028\000\028\000\028\000\028\000\028\000\ + \028\000\255\255\255\255\028\000\028\000\028\000\028\000\028\000\ + \028\000\028\000\028\000\028\000\028\000\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\028\000\028\000\028\000\028\000\ \028\000\028\000\028\000\028\000\028\000\028\000\028\000\028\000\ \028\000\028\000\028\000\028\000\028\000\028\000\028\000\028\000\ - \028\000\028\000\028\000\028\000\028\000\255\255\255\255\255\255\ - \255\255\028\000\255\255\028\000\028\000\028\000\028\000\028\000\ + \028\000\028\000\028\000\028\000\028\000\028\000\255\255\255\255\ + \255\255\255\255\028\000\255\255\028\000\028\000\028\000\028\000\ \028\000\028\000\028\000\028\000\028\000\028\000\028\000\028\000\ \028\000\028\000\028\000\028\000\028\000\028\000\028\000\028\000\ - \028\000\028\000\028\000\028\000\028\000\029\000\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\029\000\029\000\029\000\029\000\029\000\029\000\029\000\ - \029\000\029\000\029\000\255\255\255\255\255\255\255\255\255\255\ + \028\000\028\000\028\000\028\000\028\000\028\000\029\000\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\029\000\ \255\255\255\255\029\000\029\000\029\000\029\000\029\000\029\000\ + \029\000\029\000\029\000\029\000\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\029\000\029\000\029\000\029\000\029\000\ \029\000\029\000\029\000\029\000\029\000\029\000\029\000\029\000\ \029\000\029\000\029\000\029\000\029\000\029\000\029\000\029\000\ - \029\000\029\000\029\000\029\000\255\255\255\255\255\255\255\255\ - \029\000\255\255\029\000\029\000\029\000\029\000\029\000\029\000\ + \029\000\029\000\029\000\029\000\029\000\255\255\255\255\255\255\ + \255\255\029\000\255\255\029\000\029\000\029\000\029\000\029\000\ \029\000\029\000\029\000\029\000\029\000\029\000\029\000\029\000\ \029\000\029\000\029\000\029\000\029\000\029\000\029\000\029\000\ - \029\000\029\000\029\000\029\000\030\000\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \030\000\030\000\030\000\030\000\030\000\030\000\030\000\030\000\ - \030\000\030\000\255\255\255\255\255\255\255\255\255\255\255\255\ + \029\000\029\000\029\000\029\000\029\000\030\000\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\030\000\255\255\ \255\255\030\000\030\000\030\000\030\000\030\000\030\000\030\000\ + \030\000\030\000\030\000\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\030\000\030\000\030\000\030\000\030\000\030\000\ \030\000\030\000\030\000\030\000\030\000\030\000\030\000\030\000\ \030\000\030\000\030\000\030\000\030\000\030\000\030\000\030\000\ - \030\000\030\000\030\000\255\255\255\255\255\255\255\255\030\000\ - \255\255\030\000\030\000\030\000\030\000\030\000\030\000\030\000\ + \030\000\030\000\030\000\030\000\255\255\255\255\255\255\255\255\ + \030\000\255\255\030\000\030\000\030\000\030\000\030\000\030\000\ \030\000\030\000\030\000\030\000\030\000\030\000\030\000\030\000\ \030\000\030\000\030\000\030\000\030\000\030\000\030\000\030\000\ - \030\000\030\000\030\000\031\000\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\031\000\ + \030\000\030\000\030\000\030\000\031\000\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\031\000\255\255\255\255\ \031\000\031\000\031\000\031\000\031\000\031\000\031\000\031\000\ - \031\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \031\000\031\000\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\031\000\031\000\031\000\031\000\031\000\031\000\031\000\ \031\000\031\000\031\000\031\000\031\000\031\000\031\000\031\000\ \031\000\031\000\031\000\031\000\031\000\031\000\031\000\031\000\ + \031\000\031\000\031\000\255\255\255\255\255\255\255\255\031\000\ + \255\255\031\000\031\000\031\000\031\000\031\000\031\000\031\000\ \031\000\031\000\031\000\031\000\031\000\031\000\031\000\031\000\ - \031\000\031\000\255\255\255\255\255\255\255\255\031\000\255\255\ \031\000\031\000\031\000\031\000\031\000\031\000\031\000\031\000\ - \031\000\031\000\031\000\031\000\031\000\031\000\031\000\031\000\ - \031\000\031\000\031\000\031\000\031\000\031\000\031\000\031\000\ - \031\000\031\000\032\000\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\032\000\032\000\ + \031\000\031\000\031\000\032\000\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\032\000\255\255\255\255\032\000\ \032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\032\000\ + \032\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\ \032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\ \032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\ - \032\000\255\255\255\255\255\255\255\255\032\000\255\255\032\000\ + \032\000\032\000\255\255\255\255\255\255\255\255\032\000\255\255\ \032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\ \032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\ \032\000\032\000\032\000\032\000\032\000\032\000\032\000\032\000\ - \032\000\033\000\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\033\000\033\000\033\000\ - \033\000\033\000\033\000\033\000\033\000\033\000\033\000\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\033\000\033\000\ + \032\000\032\000\033\000\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\033\000\255\255\255\255\033\000\033\000\ + \033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\033\000\ \033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\ \033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\ \033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\ - \255\255\255\255\255\255\255\255\033\000\255\255\033\000\033\000\ + \033\000\255\255\255\255\255\255\255\255\033\000\255\255\033\000\ \033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\ \033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\ \033\000\033\000\033\000\033\000\033\000\033\000\033\000\033\000\ - \034\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\034\000\034\000\034\000\034\000\ - \034\000\034\000\034\000\034\000\034\000\034\000\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\034\000\034\000\034\000\ + \033\000\034\000\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\034\000\255\255\255\255\034\000\034\000\034\000\ + \034\000\034\000\034\000\034\000\034\000\034\000\034\000\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\034\000\034\000\ \034\000\034\000\034\000\034\000\034\000\034\000\034\000\034\000\ \034\000\034\000\034\000\034\000\034\000\034\000\034\000\034\000\ - \034\000\034\000\034\000\034\000\034\000\034\000\034\000\255\255\ - \255\255\255\255\255\255\034\000\255\255\034\000\034\000\034\000\ \034\000\034\000\034\000\034\000\034\000\034\000\034\000\034\000\ + \255\255\255\255\255\255\255\255\034\000\255\255\034\000\034\000\ \034\000\034\000\034\000\034\000\034\000\034\000\034\000\034\000\ - \034\000\034\000\034\000\034\000\034\000\034\000\034\000\035\000\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\035\000\035\000\035\000\035\000\035\000\ - \035\000\035\000\035\000\035\000\035\000\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\035\000\035\000\035\000\035\000\ + \034\000\034\000\034\000\034\000\034\000\034\000\034\000\034\000\ + \034\000\034\000\034\000\034\000\034\000\034\000\034\000\034\000\ + \035\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\035\000\255\255\255\255\035\000\035\000\035\000\035\000\ + \035\000\035\000\035\000\035\000\035\000\035\000\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\035\000\035\000\035\000\ \035\000\035\000\035\000\035\000\035\000\035\000\035\000\035\000\ \035\000\035\000\035\000\035\000\035\000\035\000\035\000\035\000\ - \035\000\035\000\035\000\035\000\035\000\035\000\255\255\255\255\ - \255\255\255\255\035\000\255\255\035\000\035\000\035\000\035\000\ + \035\000\035\000\035\000\035\000\035\000\035\000\035\000\255\255\ + \255\255\255\255\255\255\035\000\255\255\035\000\035\000\035\000\ \035\000\035\000\035\000\035\000\035\000\035\000\035\000\035\000\ \035\000\035\000\035\000\035\000\035\000\035\000\035\000\035\000\ - \035\000\035\000\035\000\035\000\035\000\035\000\036\000\255\255\ + \035\000\035\000\035\000\035\000\035\000\035\000\035\000\036\000\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\036\000\036\000\036\000\036\000\036\000\036\000\ - \036\000\036\000\036\000\036\000\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\036\000\036\000\036\000\036\000\036\000\ + \036\000\255\255\255\255\036\000\036\000\036\000\036\000\036\000\ + \036\000\036\000\036\000\036\000\036\000\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\036\000\036\000\036\000\036\000\ \036\000\036\000\036\000\036\000\036\000\036\000\036\000\036\000\ \036\000\036\000\036\000\036\000\036\000\036\000\036\000\036\000\ - \036\000\036\000\036\000\036\000\036\000\255\255\255\255\255\255\ - \255\255\036\000\255\255\036\000\036\000\036\000\036\000\036\000\ + \036\000\036\000\036\000\036\000\036\000\036\000\255\255\255\255\ + \255\255\255\255\036\000\255\255\036\000\036\000\036\000\036\000\ \036\000\036\000\036\000\036\000\036\000\036\000\036\000\036\000\ \036\000\036\000\036\000\036\000\036\000\036\000\036\000\036\000\ - \036\000\036\000\036\000\036\000\036\000\037\000\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\037\000\037\000\037\000\037\000\037\000\037\000\037\000\ - \037\000\037\000\037\000\255\255\255\255\255\255\255\255\255\255\ + \036\000\036\000\036\000\036\000\036\000\036\000\037\000\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\037\000\ \255\255\255\255\037\000\037\000\037\000\037\000\037\000\037\000\ + \037\000\037\000\037\000\037\000\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\037\000\037\000\037\000\037\000\037\000\ \037\000\037\000\037\000\037\000\037\000\037\000\037\000\037\000\ \037\000\037\000\037\000\037\000\037\000\037\000\037\000\037\000\ - \037\000\037\000\037\000\037\000\255\255\255\255\255\255\255\255\ - \037\000\255\255\037\000\037\000\037\000\037\000\037\000\037\000\ + \037\000\037\000\037\000\037\000\037\000\255\255\255\255\255\255\ + \255\255\037\000\255\255\037\000\037\000\037\000\037\000\037\000\ \037\000\037\000\037\000\037\000\037\000\037\000\037\000\037\000\ \037\000\037\000\037\000\037\000\037\000\037\000\037\000\037\000\ - \037\000\037\000\037\000\037\000\038\000\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \038\000\038\000\038\000\038\000\038\000\038\000\038\000\038\000\ - \038\000\038\000\255\255\255\255\255\255\255\255\255\255\255\255\ + \037\000\037\000\037\000\037\000\037\000\038\000\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\038\000\255\255\ \255\255\038\000\038\000\038\000\038\000\038\000\038\000\038\000\ + \038\000\038\000\038\000\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\038\000\038\000\038\000\038\000\038\000\038\000\ \038\000\038\000\038\000\038\000\038\000\038\000\038\000\038\000\ \038\000\038\000\038\000\038\000\038\000\038\000\038\000\038\000\ - \038\000\038\000\038\000\255\255\255\255\255\255\255\255\038\000\ - \255\255\038\000\038\000\038\000\038\000\038\000\038\000\038\000\ + \038\000\038\000\038\000\038\000\255\255\255\255\255\255\255\255\ + \038\000\255\255\038\000\038\000\038\000\038\000\038\000\038\000\ \038\000\038\000\038\000\038\000\038\000\038\000\038\000\038\000\ \038\000\038\000\038\000\038\000\038\000\038\000\038\000\038\000\ - \038\000\038\000\038\000\039\000\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\039\000\ + \038\000\038\000\038\000\038\000\039\000\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\039\000\255\255\255\255\ \039\000\039\000\039\000\039\000\039\000\039\000\039\000\039\000\ - \039\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \039\000\039\000\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\039\000\039\000\039\000\039\000\039\000\039\000\039\000\ \039\000\039\000\039\000\039\000\039\000\039\000\039\000\039\000\ \039\000\039\000\039\000\039\000\039\000\039\000\039\000\039\000\ + \039\000\039\000\039\000\255\255\255\255\255\255\255\255\039\000\ + \255\255\039\000\039\000\039\000\039\000\039\000\039\000\039\000\ \039\000\039\000\039\000\039\000\039\000\039\000\039\000\039\000\ - \039\000\039\000\255\255\255\255\255\255\255\255\039\000\255\255\ \039\000\039\000\039\000\039\000\039\000\039\000\039\000\039\000\ - \039\000\039\000\039\000\039\000\039\000\039\000\039\000\039\000\ - \039\000\039\000\039\000\039\000\039\000\039\000\039\000\039\000\ - \039\000\039\000\040\000\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\040\000\040\000\ + \039\000\039\000\039\000\040\000\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\040\000\255\255\255\255\040\000\ \040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\040\000\ + \040\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\ \040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\ \040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\ - \040\000\255\255\255\255\255\255\255\255\040\000\255\255\040\000\ + \040\000\040\000\255\255\255\255\255\255\255\255\040\000\255\255\ \040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\ \040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\ \040\000\040\000\040\000\040\000\040\000\040\000\040\000\040\000\ - \040\000\041\000\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\041\000\041\000\041\000\ - \041\000\041\000\041\000\041\000\041\000\041\000\041\000\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\041\000\041\000\ + \040\000\040\000\041\000\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\041\000\255\255\255\255\041\000\041\000\ + \041\000\041\000\041\000\041\000\041\000\041\000\041\000\041\000\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\041\000\ \041\000\041\000\041\000\041\000\041\000\041\000\041\000\041\000\ \041\000\041\000\041\000\041\000\041\000\041\000\041\000\041\000\ \041\000\041\000\041\000\041\000\041\000\041\000\041\000\041\000\ - \255\255\255\255\255\255\255\255\041\000\255\255\041\000\041\000\ + \041\000\255\255\255\255\255\255\255\255\041\000\255\255\041\000\ \041\000\041\000\041\000\041\000\041\000\041\000\041\000\041\000\ \041\000\041\000\041\000\041\000\041\000\041\000\041\000\041\000\ \041\000\041\000\041\000\041\000\041\000\041\000\041\000\041\000\ - \042\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\042\000\042\000\042\000\042\000\ - \042\000\042\000\042\000\042\000\042\000\042\000\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\042\000\042\000\042\000\ + \041\000\042\000\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\042\000\255\255\255\255\042\000\042\000\042\000\ + \042\000\042\000\042\000\042\000\042\000\042\000\042\000\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\042\000\042\000\ \042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\ \042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\ - \042\000\042\000\042\000\042\000\042\000\042\000\042\000\255\255\ - \255\255\255\255\255\255\042\000\255\255\042\000\042\000\042\000\ \042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\ + \255\255\255\255\255\255\255\255\042\000\255\255\042\000\042\000\ \042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\ - \042\000\042\000\042\000\042\000\042\000\042\000\042\000\043\000\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\043\000\043\000\043\000\043\000\043\000\ - \043\000\043\000\043\000\043\000\043\000\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\043\000\043\000\043\000\043\000\ + \042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\ + \042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\ + \043\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\043\000\255\255\255\255\043\000\043\000\043\000\043\000\ + \043\000\043\000\043\000\043\000\043\000\043\000\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\043\000\043\000\043\000\ \043\000\043\000\043\000\043\000\043\000\043\000\043\000\043\000\ \043\000\043\000\043\000\043\000\043\000\043\000\043\000\043\000\ - \043\000\043\000\043\000\043\000\043\000\043\000\255\255\255\255\ - \255\255\255\255\043\000\255\255\043\000\043\000\043\000\043\000\ + \043\000\043\000\043\000\043\000\043\000\043\000\043\000\255\255\ + \255\255\255\255\255\255\043\000\255\255\043\000\043\000\043\000\ \043\000\043\000\043\000\043\000\043\000\043\000\043\000\043\000\ \043\000\043\000\043\000\043\000\043\000\043\000\043\000\043\000\ - \043\000\043\000\043\000\043\000\043\000\043\000\044\000\255\255\ + \043\000\043\000\043\000\043\000\043\000\043\000\043\000\044\000\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\044\000\044\000\044\000\044\000\044\000\044\000\ - \044\000\044\000\044\000\044\000\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\044\000\044\000\044\000\044\000\044\000\ + \044\000\255\255\255\255\044\000\044\000\044\000\044\000\044\000\ + \044\000\044\000\044\000\044\000\044\000\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\044\000\044\000\044\000\044\000\ \044\000\044\000\044\000\044\000\044\000\044\000\044\000\044\000\ \044\000\044\000\044\000\044\000\044\000\044\000\044\000\044\000\ - \044\000\044\000\044\000\044\000\044\000\255\255\255\255\255\255\ - \255\255\044\000\255\255\044\000\044\000\044\000\044\000\044\000\ + \044\000\044\000\044\000\044\000\044\000\044\000\255\255\255\255\ + \255\255\255\255\044\000\255\255\044\000\044\000\044\000\044\000\ \044\000\044\000\044\000\044\000\044\000\044\000\044\000\044\000\ \044\000\044\000\044\000\044\000\044\000\044\000\044\000\044\000\ - \044\000\044\000\044\000\044\000\044\000\045\000\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\045\000\045\000\045\000\045\000\045\000\045\000\045\000\ - \045\000\045\000\045\000\255\255\255\255\255\255\255\255\255\255\ + \044\000\044\000\044\000\044\000\044\000\044\000\045\000\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\045\000\ \255\255\255\255\045\000\045\000\045\000\045\000\045\000\045\000\ + \045\000\045\000\045\000\045\000\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\045\000\045\000\045\000\045\000\045\000\ \045\000\045\000\045\000\045\000\045\000\045\000\045\000\045\000\ \045\000\045\000\045\000\045\000\045\000\045\000\045\000\045\000\ - \045\000\045\000\045\000\045\000\255\255\255\255\255\255\255\255\ - \045\000\255\255\045\000\045\000\045\000\045\000\045\000\045\000\ + \045\000\045\000\045\000\045\000\045\000\255\255\255\255\255\255\ + \255\255\045\000\255\255\045\000\045\000\045\000\045\000\045\000\ \045\000\045\000\045\000\045\000\045\000\045\000\045\000\045\000\ \045\000\045\000\045\000\045\000\045\000\045\000\045\000\045\000\ - \045\000\045\000\045\000\045\000\046\000\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \046\000\046\000\046\000\046\000\046\000\046\000\046\000\046\000\ - \046\000\046\000\255\255\255\255\255\255\255\255\255\255\255\255\ + \045\000\045\000\045\000\045\000\045\000\046\000\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\046\000\255\255\ \255\255\046\000\046\000\046\000\046\000\046\000\046\000\046\000\ + \046\000\046\000\046\000\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\046\000\046\000\046\000\046\000\046\000\046\000\ \046\000\046\000\046\000\046\000\046\000\046\000\046\000\046\000\ \046\000\046\000\046\000\046\000\046\000\046\000\046\000\046\000\ - \046\000\046\000\046\000\255\255\255\255\255\255\255\255\046\000\ - \255\255\046\000\046\000\046\000\046\000\046\000\046\000\046\000\ + \046\000\046\000\046\000\046\000\255\255\255\255\255\255\255\255\ + \046\000\255\255\046\000\046\000\046\000\046\000\046\000\046\000\ \046\000\046\000\046\000\046\000\046\000\046\000\046\000\046\000\ \046\000\046\000\046\000\046\000\046\000\046\000\046\000\046\000\ - \046\000\046\000\046\000\047\000\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\047\000\ + \046\000\046\000\046\000\046\000\047\000\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\047\000\255\255\255\255\ \047\000\047\000\047\000\047\000\047\000\047\000\047\000\047\000\ - \047\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \047\000\047\000\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\047\000\047\000\047\000\047\000\047\000\047\000\047\000\ \047\000\047\000\047\000\047\000\047\000\047\000\047\000\047\000\ \047\000\047\000\047\000\047\000\047\000\047\000\047\000\047\000\ + \047\000\047\000\047\000\255\255\255\255\255\255\255\255\047\000\ + \255\255\047\000\047\000\047\000\047\000\047\000\047\000\047\000\ \047\000\047\000\047\000\047\000\047\000\047\000\047\000\047\000\ - \047\000\047\000\255\255\255\255\255\255\255\255\047\000\255\255\ \047\000\047\000\047\000\047\000\047\000\047\000\047\000\047\000\ - \047\000\047\000\047\000\047\000\047\000\047\000\047\000\047\000\ - \047\000\047\000\047\000\047\000\047\000\047\000\047\000\047\000\ - \047\000\047\000\048\000\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\048\000\048\000\ + \047\000\047\000\047\000\048\000\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\048\000\255\255\255\255\048\000\ \048\000\048\000\048\000\048\000\048\000\048\000\048\000\048\000\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\048\000\ + \048\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \048\000\048\000\048\000\048\000\048\000\048\000\048\000\048\000\ \048\000\048\000\048\000\048\000\048\000\048\000\048\000\048\000\ \048\000\048\000\048\000\048\000\048\000\048\000\048\000\048\000\ - \048\000\255\255\255\255\255\255\255\255\048\000\255\255\048\000\ + \048\000\048\000\255\255\255\255\255\255\255\255\048\000\255\255\ \048\000\048\000\048\000\048\000\048\000\048\000\048\000\048\000\ \048\000\048\000\048\000\048\000\048\000\048\000\048\000\048\000\ \048\000\048\000\048\000\048\000\048\000\048\000\048\000\048\000\ - \048\000\049\000\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\049\000\049\000\049\000\ - \049\000\049\000\049\000\049\000\049\000\049\000\049\000\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\049\000\049\000\ + \048\000\048\000\049\000\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\049\000\255\255\255\255\049\000\049\000\ + \049\000\049\000\049\000\049\000\049\000\049\000\049\000\049\000\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\049\000\ \049\000\049\000\049\000\049\000\049\000\049\000\049\000\049\000\ \049\000\049\000\049\000\049\000\049\000\049\000\049\000\049\000\ \049\000\049\000\049\000\049\000\049\000\049\000\049\000\049\000\ - \255\255\255\255\255\255\255\255\049\000\255\255\049\000\049\000\ + \049\000\255\255\255\255\255\255\255\255\049\000\255\255\049\000\ \049\000\049\000\049\000\049\000\049\000\049\000\049\000\049\000\ \049\000\049\000\049\000\049\000\049\000\049\000\049\000\049\000\ \049\000\049\000\049\000\049\000\049\000\049\000\049\000\049\000\ - \050\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\050\000\050\000\050\000\050\000\ - \050\000\050\000\050\000\050\000\050\000\050\000\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\050\000\050\000\050\000\ + \049\000\050\000\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\050\000\255\255\255\255\050\000\050\000\050\000\ + \050\000\050\000\050\000\050\000\050\000\050\000\050\000\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\050\000\050\000\ \050\000\050\000\050\000\050\000\050\000\050\000\050\000\050\000\ \050\000\050\000\050\000\050\000\050\000\050\000\050\000\050\000\ - \050\000\050\000\050\000\050\000\050\000\050\000\050\000\255\255\ - \255\255\255\255\255\255\050\000\255\255\050\000\050\000\050\000\ \050\000\050\000\050\000\050\000\050\000\050\000\050\000\050\000\ + \255\255\255\255\255\255\255\255\050\000\255\255\050\000\050\000\ \050\000\050\000\050\000\050\000\050\000\050\000\050\000\050\000\ - \050\000\050\000\050\000\050\000\050\000\050\000\050\000\051\000\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\051\000\051\000\051\000\051\000\051\000\ - \051\000\051\000\051\000\051\000\051\000\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\051\000\051\000\051\000\051\000\ + \050\000\050\000\050\000\050\000\050\000\050\000\050\000\050\000\ + \050\000\050\000\050\000\050\000\050\000\050\000\050\000\050\000\ + \051\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\051\000\255\255\255\255\051\000\051\000\051\000\051\000\ + \051\000\051\000\051\000\051\000\051\000\051\000\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\051\000\051\000\051\000\ \051\000\051\000\051\000\051\000\051\000\051\000\051\000\051\000\ \051\000\051\000\051\000\051\000\051\000\051\000\051\000\051\000\ - \051\000\051\000\051\000\051\000\051\000\051\000\255\255\255\255\ - \255\255\255\255\051\000\255\255\051\000\051\000\051\000\051\000\ + \051\000\051\000\051\000\051\000\051\000\051\000\051\000\255\255\ + \255\255\255\255\255\255\051\000\255\255\051\000\051\000\051\000\ \051\000\051\000\051\000\051\000\051\000\051\000\051\000\051\000\ \051\000\051\000\051\000\051\000\051\000\051\000\051\000\051\000\ - \051\000\051\000\051\000\051\000\051\000\051\000\052\000\255\255\ + \051\000\051\000\051\000\051\000\051\000\051\000\051\000\052\000\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\052\000\052\000\052\000\052\000\052\000\052\000\ - \052\000\052\000\052\000\052\000\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\052\000\052\000\052\000\052\000\052\000\ + \052\000\255\255\255\255\052\000\052\000\052\000\052\000\052\000\ + \052\000\052\000\052\000\052\000\052\000\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\052\000\052\000\052\000\052\000\ \052\000\052\000\052\000\052\000\052\000\052\000\052\000\052\000\ \052\000\052\000\052\000\052\000\052\000\052\000\052\000\052\000\ - \052\000\052\000\052\000\052\000\052\000\255\255\255\255\255\255\ - \255\255\052\000\255\255\052\000\052\000\052\000\052\000\052\000\ + \052\000\052\000\052\000\052\000\052\000\052\000\255\255\255\255\ + \255\255\255\255\052\000\255\255\052\000\052\000\052\000\052\000\ \052\000\052\000\052\000\052\000\052\000\052\000\052\000\052\000\ \052\000\052\000\052\000\052\000\052\000\052\000\052\000\052\000\ - \052\000\052\000\052\000\052\000\052\000\053\000\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\053\000\053\000\053\000\053\000\053\000\053\000\053\000\ - \053\000\053\000\053\000\255\255\255\255\255\255\255\255\255\255\ + \052\000\052\000\052\000\052\000\052\000\052\000\053\000\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\053\000\ \255\255\255\255\053\000\053\000\053\000\053\000\053\000\053\000\ + \053\000\053\000\053\000\053\000\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\053\000\053\000\053\000\053\000\053\000\ \053\000\053\000\053\000\053\000\053\000\053\000\053\000\053\000\ \053\000\053\000\053\000\053\000\053\000\053\000\053\000\053\000\ - \053\000\053\000\053\000\053\000\255\255\255\255\255\255\255\255\ - \053\000\255\255\053\000\053\000\053\000\053\000\053\000\053\000\ + \053\000\053\000\053\000\053\000\053\000\255\255\255\255\255\255\ + \255\255\053\000\255\255\053\000\053\000\053\000\053\000\053\000\ \053\000\053\000\053\000\053\000\053\000\053\000\053\000\053\000\ \053\000\053\000\053\000\053\000\053\000\053\000\053\000\053\000\ - \053\000\053\000\053\000\053\000\054\000\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \054\000\054\000\054\000\054\000\054\000\054\000\054\000\054\000\ - \054\000\054\000\255\255\255\255\255\255\255\255\255\255\255\255\ + \053\000\053\000\053\000\053\000\053\000\054\000\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\054\000\255\255\ \255\255\054\000\054\000\054\000\054\000\054\000\054\000\054\000\ + \054\000\054\000\054\000\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\054\000\054\000\054\000\054\000\054\000\054\000\ \054\000\054\000\054\000\054\000\054\000\054\000\054\000\054\000\ \054\000\054\000\054\000\054\000\054\000\054\000\054\000\054\000\ - \054\000\054\000\054\000\255\255\255\255\255\255\255\255\054\000\ - \255\255\054\000\054\000\054\000\054\000\054\000\054\000\054\000\ + \054\000\054\000\054\000\054\000\255\255\255\255\255\255\255\255\ + \054\000\255\255\054\000\054\000\054\000\054\000\054\000\054\000\ \054\000\054\000\054\000\054\000\054\000\054\000\054\000\054\000\ \054\000\054\000\054\000\054\000\054\000\054\000\054\000\054\000\ - \054\000\054\000\054\000\055\000\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\055\000\ + \054\000\054\000\054\000\054\000\055\000\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\055\000\255\255\255\255\ \055\000\055\000\055\000\055\000\055\000\055\000\055\000\055\000\ - \055\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \055\000\055\000\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\055\000\055\000\055\000\055\000\055\000\055\000\055\000\ \055\000\055\000\055\000\055\000\055\000\055\000\055\000\055\000\ \055\000\055\000\055\000\055\000\055\000\055\000\055\000\055\000\ + \055\000\055\000\055\000\255\255\255\255\255\255\255\255\055\000\ + \255\255\055\000\055\000\055\000\055\000\055\000\055\000\055\000\ \055\000\055\000\055\000\055\000\055\000\055\000\055\000\055\000\ - \055\000\055\000\255\255\255\255\255\255\255\255\055\000\255\255\ \055\000\055\000\055\000\055\000\055\000\055\000\055\000\055\000\ - \055\000\055\000\055\000\055\000\055\000\055\000\055\000\055\000\ - \055\000\055\000\055\000\055\000\055\000\055\000\055\000\055\000\ - \055\000\055\000\056\000\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\056\000\056\000\ + \055\000\055\000\055\000\056\000\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\056\000\255\255\255\255\056\000\ \056\000\056\000\056\000\056\000\056\000\056\000\056\000\056\000\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\056\000\ + \056\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \056\000\056\000\056\000\056\000\056\000\056\000\056\000\056\000\ \056\000\056\000\056\000\056\000\056\000\056\000\056\000\056\000\ \056\000\056\000\056\000\056\000\056\000\056\000\056\000\056\000\ - \056\000\255\255\255\255\255\255\255\255\056\000\255\255\056\000\ + \056\000\056\000\255\255\255\255\255\255\255\255\056\000\255\255\ \056\000\056\000\056\000\056\000\056\000\056\000\056\000\056\000\ \056\000\056\000\056\000\056\000\056\000\056\000\056\000\056\000\ \056\000\056\000\056\000\056\000\056\000\056\000\056\000\056\000\ - \056\000\057\000\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\057\000\057\000\057\000\ - \057\000\057\000\057\000\057\000\057\000\057\000\057\000\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\057\000\057\000\ + \056\000\056\000\057\000\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\057\000\255\255\255\255\057\000\057\000\ + \057\000\057\000\057\000\057\000\057\000\057\000\057\000\057\000\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\057\000\ \057\000\057\000\057\000\057\000\057\000\057\000\057\000\057\000\ \057\000\057\000\057\000\057\000\057\000\057\000\057\000\057\000\ \057\000\057\000\057\000\057\000\057\000\057\000\057\000\057\000\ - \255\255\255\255\255\255\255\255\057\000\255\255\057\000\057\000\ + \057\000\255\255\255\255\255\255\255\255\057\000\255\255\057\000\ \057\000\057\000\057\000\057\000\057\000\057\000\057\000\057\000\ \057\000\057\000\057\000\057\000\057\000\057\000\057\000\057\000\ \057\000\057\000\057\000\057\000\057\000\057\000\057\000\057\000\ - \058\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\058\000\058\000\058\000\058\000\ - \058\000\058\000\058\000\058\000\058\000\058\000\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\058\000\058\000\058\000\ + \057\000\058\000\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\058\000\255\255\255\255\058\000\058\000\058\000\ + \058\000\058\000\058\000\058\000\058\000\058\000\058\000\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\058\000\058\000\ \058\000\058\000\058\000\058\000\058\000\058\000\058\000\058\000\ \058\000\058\000\058\000\058\000\058\000\058\000\058\000\058\000\ - \058\000\058\000\058\000\058\000\058\000\058\000\058\000\255\255\ - \255\255\255\255\255\255\058\000\255\255\058\000\058\000\058\000\ \058\000\058\000\058\000\058\000\058\000\058\000\058\000\058\000\ + \255\255\255\255\255\255\255\255\058\000\255\255\058\000\058\000\ \058\000\058\000\058\000\058\000\058\000\058\000\058\000\058\000\ - \058\000\058\000\058\000\058\000\058\000\058\000\058\000\059\000\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\059\000\059\000\059\000\059\000\059\000\ - \059\000\059\000\059\000\059\000\059\000\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\059\000\059\000\059\000\059\000\ + \058\000\058\000\058\000\058\000\058\000\058\000\058\000\058\000\ + \058\000\058\000\058\000\058\000\058\000\058\000\058\000\058\000\ + \059\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\059\000\255\255\255\255\059\000\059\000\059\000\059\000\ + \059\000\059\000\059\000\059\000\059\000\059\000\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\059\000\059\000\059\000\ \059\000\059\000\059\000\059\000\059\000\059\000\059\000\059\000\ \059\000\059\000\059\000\059\000\059\000\059\000\059\000\059\000\ - \059\000\059\000\059\000\059\000\059\000\059\000\255\255\255\255\ - \255\255\255\255\059\000\255\255\059\000\059\000\059\000\059\000\ + \059\000\059\000\059\000\059\000\059\000\059\000\059\000\255\255\ + \255\255\255\255\255\255\059\000\255\255\059\000\059\000\059\000\ \059\000\059\000\059\000\059\000\059\000\059\000\059\000\059\000\ \059\000\059\000\059\000\059\000\059\000\059\000\059\000\059\000\ - \059\000\059\000\059\000\059\000\059\000\059\000\060\000\255\255\ + \059\000\059\000\059\000\059\000\059\000\059\000\059\000\060\000\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\060\000\060\000\060\000\060\000\060\000\060\000\ - \060\000\060\000\060\000\060\000\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\060\000\060\000\060\000\060\000\060\000\ + \060\000\255\255\255\255\060\000\060\000\060\000\060\000\060\000\ + \060\000\060\000\060\000\060\000\060\000\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\060\000\060\000\060\000\060\000\ \060\000\060\000\060\000\060\000\060\000\060\000\060\000\060\000\ \060\000\060\000\060\000\060\000\060\000\060\000\060\000\060\000\ - \060\000\060\000\060\000\060\000\060\000\255\255\255\255\255\255\ - \255\255\060\000\255\255\060\000\060\000\060\000\060\000\060\000\ + \060\000\060\000\060\000\060\000\060\000\060\000\255\255\255\255\ + \255\255\255\255\060\000\255\255\060\000\060\000\060\000\060\000\ \060\000\060\000\060\000\060\000\060\000\060\000\060\000\060\000\ \060\000\060\000\060\000\060\000\060\000\060\000\060\000\060\000\ - \060\000\060\000\060\000\060\000\060\000\061\000\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\061\000\061\000\061\000\061\000\061\000\061\000\061\000\ - \061\000\061\000\061\000\255\255\255\255\255\255\255\255\255\255\ + \060\000\060\000\060\000\060\000\060\000\060\000\061\000\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\061\000\ \255\255\255\255\061\000\061\000\061\000\061\000\061\000\061\000\ + \061\000\061\000\061\000\061\000\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\061\000\061\000\061\000\061\000\061\000\ \061\000\061\000\061\000\061\000\061\000\061\000\061\000\061\000\ \061\000\061\000\061\000\061\000\061\000\061\000\061\000\061\000\ - \061\000\061\000\061\000\061\000\255\255\255\255\255\255\255\255\ - \061\000\255\255\061\000\061\000\061\000\061\000\061\000\061\000\ + \061\000\061\000\061\000\061\000\061\000\255\255\255\255\255\255\ + \255\255\061\000\255\255\061\000\061\000\061\000\061\000\061\000\ \061\000\061\000\061\000\061\000\061\000\061\000\061\000\061\000\ \061\000\061\000\061\000\061\000\061\000\061\000\061\000\061\000\ - \061\000\061\000\061\000\061\000\062\000\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \062\000\062\000\062\000\062\000\062\000\062\000\062\000\062\000\ - \062\000\062\000\255\255\255\255\255\255\255\255\255\255\255\255\ + \061\000\061\000\061\000\061\000\061\000\062\000\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\062\000\255\255\ \255\255\062\000\062\000\062\000\062\000\062\000\062\000\062\000\ + \062\000\062\000\062\000\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\062\000\062\000\062\000\062\000\062\000\062\000\ \062\000\062\000\062\000\062\000\062\000\062\000\062\000\062\000\ \062\000\062\000\062\000\062\000\062\000\062\000\062\000\062\000\ - \062\000\062\000\062\000\255\255\255\255\255\255\255\255\062\000\ - \255\255\062\000\062\000\062\000\062\000\062\000\062\000\062\000\ + \062\000\062\000\062\000\062\000\255\255\255\255\255\255\255\255\ + \062\000\255\255\062\000\062\000\062\000\062\000\062\000\062\000\ \062\000\062\000\062\000\062\000\062\000\062\000\062\000\062\000\ \062\000\062\000\062\000\062\000\062\000\062\000\062\000\062\000\ - \062\000\062\000\062\000\063\000\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\063\000\ + \062\000\062\000\062\000\062\000\063\000\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\063\000\255\255\255\255\ \063\000\063\000\063\000\063\000\063\000\063\000\063\000\063\000\ - \063\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \063\000\063\000\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\063\000\063\000\063\000\063\000\063\000\063\000\063\000\ \063\000\063\000\063\000\063\000\063\000\063\000\063\000\063\000\ \063\000\063\000\063\000\063\000\063\000\063\000\063\000\063\000\ + \063\000\063\000\063\000\255\255\255\255\255\255\255\255\063\000\ + \255\255\063\000\063\000\063\000\063\000\063\000\063\000\063\000\ \063\000\063\000\063\000\063\000\063\000\063\000\063\000\063\000\ - \063\000\063\000\255\255\255\255\255\255\255\255\063\000\255\255\ \063\000\063\000\063\000\063\000\063\000\063\000\063\000\063\000\ - \063\000\063\000\063\000\063\000\063\000\063\000\063\000\063\000\ - \063\000\063\000\063\000\063\000\063\000\063\000\063\000\063\000\ - \063\000\063\000\064\000\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\064\000\064\000\ + \063\000\063\000\063\000\064\000\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\064\000\255\255\255\255\064\000\ \064\000\064\000\064\000\064\000\064\000\064\000\064\000\064\000\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\064\000\ + \064\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \064\000\064\000\064\000\064\000\064\000\064\000\064\000\064\000\ \064\000\064\000\064\000\064\000\064\000\064\000\064\000\064\000\ \064\000\064\000\064\000\064\000\064\000\064\000\064\000\064\000\ - \064\000\255\255\255\255\255\255\255\255\064\000\255\255\064\000\ + \064\000\064\000\255\255\255\255\255\255\255\255\064\000\255\255\ \064\000\064\000\064\000\064\000\064\000\064\000\064\000\064\000\ \064\000\064\000\064\000\064\000\064\000\064\000\064\000\064\000\ \064\000\064\000\064\000\064\000\064\000\064\000\064\000\064\000\ - \064\000\065\000\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\065\000\065\000\065\000\ - \065\000\065\000\065\000\065\000\065\000\065\000\065\000\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\065\000\065\000\ + \064\000\064\000\065\000\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\065\000\255\255\255\255\065\000\065\000\ + \065\000\065\000\065\000\065\000\065\000\065\000\065\000\065\000\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\065\000\ \065\000\065\000\065\000\065\000\065\000\065\000\065\000\065\000\ \065\000\065\000\065\000\065\000\065\000\065\000\065\000\065\000\ \065\000\065\000\065\000\065\000\065\000\065\000\065\000\065\000\ - \255\255\255\255\255\255\255\255\065\000\255\255\065\000\065\000\ + \065\000\255\255\255\255\255\255\255\255\065\000\255\255\065\000\ \065\000\065\000\065\000\065\000\065\000\065\000\065\000\065\000\ \065\000\065\000\065\000\065\000\065\000\065\000\065\000\065\000\ \065\000\065\000\065\000\065\000\065\000\065\000\065\000\065\000\ - \066\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\066\000\066\000\066\000\066\000\ - \066\000\066\000\066\000\066\000\066\000\066\000\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\066\000\066\000\066\000\ + \065\000\066\000\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\066\000\255\255\255\255\066\000\066\000\066\000\ + \066\000\066\000\066\000\066\000\066\000\066\000\066\000\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\066\000\066\000\ \066\000\066\000\066\000\066\000\066\000\066\000\066\000\066\000\ \066\000\066\000\066\000\066\000\066\000\066\000\066\000\066\000\ - \066\000\066\000\066\000\066\000\066\000\066\000\066\000\255\255\ - \255\255\255\255\255\255\066\000\255\255\066\000\066\000\066\000\ \066\000\066\000\066\000\066\000\066\000\066\000\066\000\066\000\ + \255\255\255\255\255\255\255\255\066\000\255\255\066\000\066\000\ \066\000\066\000\066\000\066\000\066\000\066\000\066\000\066\000\ - \066\000\066\000\066\000\066\000\066\000\066\000\066\000\067\000\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\067\000\067\000\067\000\067\000\067\000\ - \067\000\067\000\067\000\067\000\067\000\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\067\000\067\000\067\000\067\000\ + \066\000\066\000\066\000\066\000\066\000\066\000\066\000\066\000\ + \066\000\066\000\066\000\066\000\066\000\066\000\066\000\066\000\ + \067\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\067\000\255\255\255\255\067\000\067\000\067\000\067\000\ + \067\000\067\000\067\000\067\000\067\000\067\000\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\067\000\067\000\067\000\ \067\000\067\000\067\000\067\000\067\000\067\000\067\000\067\000\ \067\000\067\000\067\000\067\000\067\000\067\000\067\000\067\000\ - \067\000\067\000\067\000\067\000\067\000\067\000\255\255\255\255\ - \255\255\255\255\067\000\255\255\067\000\067\000\067\000\067\000\ + \067\000\067\000\067\000\067\000\067\000\067\000\067\000\255\255\ + \255\255\255\255\255\255\067\000\255\255\067\000\067\000\067\000\ \067\000\067\000\067\000\067\000\067\000\067\000\067\000\067\000\ \067\000\067\000\067\000\067\000\067\000\067\000\067\000\067\000\ - \067\000\067\000\067\000\067\000\067\000\067\000\068\000\255\255\ + \067\000\067\000\067\000\067\000\067\000\067\000\067\000\068\000\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\068\000\068\000\068\000\068\000\068\000\068\000\ - \068\000\068\000\068\000\068\000\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\068\000\068\000\068\000\068\000\068\000\ + \068\000\255\255\255\255\068\000\068\000\068\000\068\000\068\000\ + \068\000\068\000\068\000\068\000\068\000\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\068\000\068\000\068\000\068\000\ \068\000\068\000\068\000\068\000\068\000\068\000\068\000\068\000\ \068\000\068\000\068\000\068\000\068\000\068\000\068\000\068\000\ - \068\000\068\000\068\000\068\000\068\000\255\255\255\255\255\255\ - \255\255\068\000\255\255\068\000\068\000\068\000\068\000\068\000\ + \068\000\068\000\068\000\068\000\068\000\068\000\255\255\255\255\ + \255\255\255\255\068\000\255\255\068\000\068\000\068\000\068\000\ \068\000\068\000\068\000\068\000\068\000\068\000\068\000\068\000\ \068\000\068\000\068\000\068\000\068\000\068\000\068\000\068\000\ - \068\000\068\000\068\000\068\000\068\000\069\000\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\069\000\069\000\069\000\069\000\069\000\069\000\069\000\ - \069\000\069\000\069\000\255\255\255\255\255\255\255\255\255\255\ + \068\000\068\000\068\000\068\000\068\000\068\000\069\000\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\069\000\ \255\255\255\255\069\000\069\000\069\000\069\000\069\000\069\000\ + \069\000\069\000\069\000\069\000\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\069\000\069\000\069\000\069\000\069\000\ \069\000\069\000\069\000\069\000\069\000\069\000\069\000\069\000\ \069\000\069\000\069\000\069\000\069\000\069\000\069\000\069\000\ - \069\000\069\000\069\000\069\000\255\255\255\255\255\255\255\255\ - \069\000\255\255\069\000\069\000\069\000\069\000\069\000\069\000\ + \069\000\069\000\069\000\069\000\069\000\255\255\255\255\255\255\ + \255\255\069\000\255\255\069\000\069\000\069\000\069\000\069\000\ \069\000\069\000\069\000\069\000\069\000\069\000\069\000\069\000\ \069\000\069\000\069\000\069\000\069\000\069\000\069\000\069\000\ - \069\000\069\000\069\000\069\000\070\000\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \070\000\070\000\070\000\070\000\070\000\070\000\070\000\070\000\ - \070\000\070\000\255\255\255\255\255\255\255\255\255\255\255\255\ + \069\000\069\000\069\000\069\000\069\000\070\000\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\070\000\255\255\ \255\255\070\000\070\000\070\000\070\000\070\000\070\000\070\000\ + \070\000\070\000\070\000\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\070\000\070\000\070\000\070\000\070\000\070\000\ \070\000\070\000\070\000\070\000\070\000\070\000\070\000\070\000\ \070\000\070\000\070\000\070\000\070\000\070\000\070\000\070\000\ - \070\000\070\000\070\000\255\255\255\255\255\255\255\255\070\000\ - \255\255\070\000\070\000\070\000\070\000\070\000\070\000\070\000\ + \070\000\070\000\070\000\070\000\255\255\255\255\255\255\255\255\ + \070\000\255\255\070\000\070\000\070\000\070\000\070\000\070\000\ \070\000\070\000\070\000\070\000\070\000\070\000\070\000\070\000\ \070\000\070\000\070\000\070\000\070\000\070\000\070\000\070\000\ - \070\000\070\000\070\000\071\000\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\071\000\ + \070\000\070\000\070\000\070\000\071\000\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\071\000\255\255\255\255\ \071\000\071\000\071\000\071\000\071\000\071\000\071\000\071\000\ - \071\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \071\000\071\000\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\071\000\071\000\071\000\071\000\071\000\071\000\071\000\ \071\000\071\000\071\000\071\000\071\000\071\000\071\000\071\000\ \071\000\071\000\071\000\071\000\071\000\071\000\071\000\071\000\ + \071\000\071\000\071\000\255\255\255\255\255\255\255\255\071\000\ + \255\255\071\000\071\000\071\000\071\000\071\000\071\000\071\000\ \071\000\071\000\071\000\071\000\071\000\071\000\071\000\071\000\ - \071\000\071\000\255\255\255\255\255\255\255\255\071\000\255\255\ \071\000\071\000\071\000\071\000\071\000\071\000\071\000\071\000\ - \071\000\071\000\071\000\071\000\071\000\071\000\071\000\071\000\ - \071\000\071\000\071\000\071\000\071\000\071\000\071\000\071\000\ - \071\000\071\000\072\000\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\072\000\072\000\ + \071\000\071\000\071\000\072\000\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\072\000\255\255\255\255\072\000\ \072\000\072\000\072\000\072\000\072\000\072\000\072\000\072\000\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\072\000\ + \072\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \072\000\072\000\072\000\072\000\072\000\072\000\072\000\072\000\ \072\000\072\000\072\000\072\000\072\000\072\000\072\000\072\000\ \072\000\072\000\072\000\072\000\072\000\072\000\072\000\072\000\ - \072\000\255\255\255\255\255\255\255\255\072\000\255\255\072\000\ + \072\000\072\000\255\255\255\255\255\255\255\255\072\000\255\255\ \072\000\072\000\072\000\072\000\072\000\072\000\072\000\072\000\ \072\000\072\000\072\000\072\000\072\000\072\000\072\000\072\000\ \072\000\072\000\072\000\072\000\072\000\072\000\072\000\072\000\ - \072\000\073\000\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\073\000\073\000\073\000\ - \073\000\073\000\073\000\073\000\073\000\073\000\073\000\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\073\000\073\000\ + \072\000\072\000\073\000\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\073\000\255\255\255\255\073\000\073\000\ + \073\000\073\000\073\000\073\000\073\000\073\000\073\000\073\000\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\073\000\ \073\000\073\000\073\000\073\000\073\000\073\000\073\000\073\000\ \073\000\073\000\073\000\073\000\073\000\073\000\073\000\073\000\ \073\000\073\000\073\000\073\000\073\000\073\000\073\000\073\000\ - \255\255\255\255\255\255\255\255\073\000\255\255\073\000\073\000\ + \073\000\255\255\255\255\255\255\255\255\073\000\255\255\073\000\ \073\000\073\000\073\000\073\000\073\000\073\000\073\000\073\000\ \073\000\073\000\073\000\073\000\073\000\073\000\073\000\073\000\ \073\000\073\000\073\000\073\000\073\000\073\000\073\000\073\000\ - \074\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\074\000\074\000\074\000\074\000\ - \074\000\074\000\074\000\074\000\074\000\074\000\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\074\000\074\000\074\000\ + \073\000\074\000\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\074\000\255\255\255\255\074\000\074\000\074\000\ + \074\000\074\000\074\000\074\000\074\000\074\000\074\000\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\074\000\074\000\ \074\000\074\000\074\000\074\000\074\000\074\000\074\000\074\000\ \074\000\074\000\074\000\074\000\074\000\074\000\074\000\074\000\ - \074\000\074\000\074\000\074\000\074\000\074\000\074\000\255\255\ - \255\255\255\255\255\255\074\000\255\255\074\000\074\000\074\000\ \074\000\074\000\074\000\074\000\074\000\074\000\074\000\074\000\ + \255\255\255\255\255\255\255\255\074\000\255\255\074\000\074\000\ \074\000\074\000\074\000\074\000\074\000\074\000\074\000\074\000\ - \074\000\074\000\074\000\074\000\074\000\074\000\074\000\075\000\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\075\000\075\000\075\000\075\000\075\000\ - \075\000\075\000\075\000\075\000\075\000\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\075\000\075\000\075\000\075\000\ + \074\000\074\000\074\000\074\000\074\000\074\000\074\000\074\000\ + \074\000\074\000\074\000\074\000\074\000\074\000\074\000\074\000\ + \075\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\075\000\255\255\255\255\075\000\075\000\075\000\075\000\ + \075\000\075\000\075\000\075\000\075\000\075\000\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\075\000\075\000\075\000\ \075\000\075\000\075\000\075\000\075\000\075\000\075\000\075\000\ \075\000\075\000\075\000\075\000\075\000\075\000\075\000\075\000\ - \075\000\075\000\075\000\075\000\075\000\075\000\255\255\255\255\ - \255\255\255\255\075\000\255\255\075\000\075\000\075\000\075\000\ + \075\000\075\000\075\000\075\000\075\000\075\000\075\000\255\255\ + \255\255\255\255\255\255\075\000\255\255\075\000\075\000\075\000\ \075\000\075\000\075\000\075\000\075\000\075\000\075\000\075\000\ \075\000\075\000\075\000\075\000\075\000\075\000\075\000\075\000\ - \075\000\075\000\075\000\075\000\075\000\075\000\076\000\255\255\ + \075\000\075\000\075\000\075\000\075\000\075\000\075\000\076\000\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\076\000\076\000\076\000\076\000\076\000\076\000\ - \076\000\076\000\076\000\076\000\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\076\000\076\000\076\000\076\000\076\000\ + \076\000\255\255\255\255\076\000\076\000\076\000\076\000\076\000\ + \076\000\076\000\076\000\076\000\076\000\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\076\000\076\000\076\000\076\000\ \076\000\076\000\076\000\076\000\076\000\076\000\076\000\076\000\ \076\000\076\000\076\000\076\000\076\000\076\000\076\000\076\000\ - \076\000\076\000\076\000\076\000\076\000\255\255\255\255\255\255\ - \255\255\076\000\255\255\076\000\076\000\076\000\076\000\076\000\ + \076\000\076\000\076\000\076\000\076\000\076\000\255\255\255\255\ + \255\255\255\255\076\000\255\255\076\000\076\000\076\000\076\000\ \076\000\076\000\076\000\076\000\076\000\076\000\076\000\076\000\ \076\000\076\000\076\000\076\000\076\000\076\000\076\000\076\000\ - \076\000\076\000\076\000\076\000\076\000\077\000\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\077\000\077\000\077\000\077\000\077\000\077\000\077\000\ - \077\000\077\000\077\000\255\255\255\255\255\255\255\255\255\255\ + \076\000\076\000\076\000\076\000\076\000\076\000\077\000\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\077\000\ \255\255\255\255\077\000\077\000\077\000\077\000\077\000\077\000\ + \077\000\077\000\077\000\077\000\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\077\000\077\000\077\000\077\000\077\000\ \077\000\077\000\077\000\077\000\077\000\077\000\077\000\077\000\ \077\000\077\000\077\000\077\000\077\000\077\000\077\000\077\000\ - \077\000\077\000\077\000\077\000\255\255\255\255\255\255\255\255\ - \077\000\255\255\077\000\077\000\077\000\077\000\077\000\077\000\ + \077\000\077\000\077\000\077\000\077\000\255\255\255\255\255\255\ + \255\255\077\000\255\255\077\000\077\000\077\000\077\000\077\000\ \077\000\077\000\077\000\077\000\077\000\077\000\077\000\077\000\ \077\000\077\000\077\000\077\000\077\000\077\000\077\000\077\000\ - \077\000\077\000\077\000\077\000\078\000\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \078\000\078\000\078\000\078\000\078\000\078\000\078\000\078\000\ - \078\000\078\000\255\255\255\255\255\255\255\255\255\255\255\255\ + \077\000\077\000\077\000\077\000\077\000\078\000\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\078\000\255\255\ \255\255\078\000\078\000\078\000\078\000\078\000\078\000\078\000\ + \078\000\078\000\078\000\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\078\000\078\000\078\000\078\000\078\000\078\000\ \078\000\078\000\078\000\078\000\078\000\078\000\078\000\078\000\ \078\000\078\000\078\000\078\000\078\000\078\000\078\000\078\000\ - \078\000\078\000\078\000\255\255\255\255\255\255\255\255\078\000\ - \255\255\078\000\078\000\078\000\078\000\078\000\078\000\078\000\ + \078\000\078\000\078\000\078\000\255\255\255\255\255\255\255\255\ + \078\000\255\255\078\000\078\000\078\000\078\000\078\000\078\000\ \078\000\078\000\078\000\078\000\078\000\078\000\078\000\078\000\ \078\000\078\000\078\000\078\000\078\000\078\000\078\000\078\000\ - \078\000\078\000\078\000\079\000\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\079\000\ + \078\000\078\000\078\000\078\000\079\000\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\079\000\255\255\255\255\ \079\000\079\000\079\000\079\000\079\000\079\000\079\000\079\000\ - \079\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \079\000\079\000\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\079\000\079\000\079\000\079\000\079\000\079\000\079\000\ \079\000\079\000\079\000\079\000\079\000\079\000\079\000\079\000\ \079\000\079\000\079\000\079\000\079\000\079\000\079\000\079\000\ + \079\000\079\000\079\000\255\255\255\255\255\255\255\255\079\000\ + \255\255\079\000\079\000\079\000\079\000\079\000\079\000\079\000\ \079\000\079\000\079\000\079\000\079\000\079\000\079\000\079\000\ - \079\000\079\000\255\255\255\255\255\255\255\255\079\000\255\255\ \079\000\079\000\079\000\079\000\079\000\079\000\079\000\079\000\ - \079\000\079\000\079\000\079\000\079\000\079\000\079\000\079\000\ - \079\000\079\000\079\000\079\000\079\000\079\000\079\000\079\000\ - \079\000\079\000\080\000\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\080\000\080\000\ + \079\000\079\000\079\000\080\000\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\080\000\255\255\255\255\080\000\ \080\000\080\000\080\000\080\000\080\000\080\000\080\000\080\000\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\080\000\ + \080\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \080\000\080\000\080\000\080\000\080\000\080\000\080\000\080\000\ \080\000\080\000\080\000\080\000\080\000\080\000\080\000\080\000\ \080\000\080\000\080\000\080\000\080\000\080\000\080\000\080\000\ - \080\000\255\255\255\255\255\255\255\255\080\000\255\255\080\000\ + \080\000\080\000\255\255\255\255\255\255\255\255\080\000\255\255\ \080\000\080\000\080\000\080\000\080\000\080\000\080\000\080\000\ \080\000\080\000\080\000\080\000\080\000\080\000\080\000\080\000\ \080\000\080\000\080\000\080\000\080\000\080\000\080\000\080\000\ - \080\000\081\000\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\081\000\081\000\081\000\ - \081\000\081\000\081\000\081\000\081\000\081\000\081\000\255\255\ - \255\255\255\255\255\255\255\255\255\255\255\255\081\000\081\000\ + \080\000\080\000\081\000\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\081\000\255\255\255\255\081\000\081\000\ + \081\000\081\000\081\000\081\000\081\000\081\000\081\000\081\000\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\081\000\ \081\000\081\000\081\000\081\000\081\000\081\000\081\000\081\000\ \081\000\081\000\081\000\081\000\081\000\081\000\081\000\081\000\ \081\000\081\000\081\000\081\000\081\000\081\000\081\000\081\000\ - \255\255\255\255\255\255\255\255\081\000\255\255\081\000\081\000\ + \081\000\255\255\255\255\255\255\255\255\081\000\255\255\081\000\ \081\000\081\000\081\000\081\000\081\000\081\000\081\000\081\000\ \081\000\081\000\081\000\081\000\081\000\081\000\081\000\081\000\ \081\000\081\000\081\000\081\000\081\000\081\000\081\000\081\000\ - \082\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\082\000\082\000\082\000\082\000\ - \082\000\082\000\082\000\082\000\082\000\082\000\255\255\255\255\ - \255\255\255\255\255\255\255\255\255\255\082\000\082\000\082\000\ + \081\000\082\000\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\082\000\255\255\255\255\082\000\082\000\082\000\ + \082\000\082\000\082\000\082\000\082\000\082\000\082\000\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\082\000\082\000\ \082\000\082\000\082\000\082\000\082\000\082\000\082\000\082\000\ \082\000\082\000\082\000\082\000\082\000\082\000\082\000\082\000\ - \082\000\082\000\082\000\082\000\082\000\082\000\082\000\255\255\ - \255\255\255\255\255\255\082\000\255\255\082\000\082\000\082\000\ \082\000\082\000\082\000\082\000\082\000\082\000\082\000\082\000\ + \255\255\255\255\255\255\255\255\082\000\255\255\082\000\082\000\ \082\000\082\000\082\000\082\000\082\000\082\000\082\000\082\000\ - \082\000\082\000\082\000\082\000\082\000\082\000\082\000\083\000\ - \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\083\000\083\000\083\000\083\000\083\000\ - \083\000\083\000\083\000\083\000\083\000\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255\083\000\083\000\083\000\083\000\ + \082\000\082\000\082\000\082\000\082\000\082\000\082\000\082\000\ + \082\000\082\000\082\000\082\000\082\000\082\000\082\000\082\000\ + \083\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\083\000\255\255\255\255\083\000\083\000\083\000\083\000\ + \083\000\083\000\083\000\083\000\083\000\083\000\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\083\000\083\000\083\000\ \083\000\083\000\083\000\083\000\083\000\083\000\083\000\083\000\ \083\000\083\000\083\000\083\000\083\000\083\000\083\000\083\000\ - \083\000\083\000\083\000\083\000\083\000\083\000\255\255\255\255\ - \255\255\255\255\083\000\255\255\083\000\083\000\083\000\083\000\ + \083\000\083\000\083\000\083\000\083\000\083\000\083\000\255\255\ + \255\255\255\255\255\255\083\000\255\255\083\000\083\000\083\000\ \083\000\083\000\083\000\083\000\083\000\083\000\083\000\083\000\ \083\000\083\000\083\000\083\000\083\000\083\000\083\000\083\000\ - \083\000\083\000\083\000\083\000\083\000\083\000\255\255\255\255\ + \083\000\083\000\083\000\083\000\083\000\083\000\083\000\084\000\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \084\000\255\255\255\255\084\000\084\000\084\000\084\000\084\000\ + \084\000\084\000\084\000\084\000\084\000\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\084\000\084\000\084\000\084\000\ + \084\000\084\000\084\000\084\000\084\000\084\000\084\000\084\000\ + \084\000\084\000\084\000\084\000\084\000\084\000\084\000\084\000\ + \084\000\084\000\084\000\084\000\084\000\084\000\255\255\255\255\ + \255\255\255\255\084\000\255\255\084\000\084\000\084\000\084\000\ + \084\000\084\000\084\000\084\000\084\000\084\000\084\000\084\000\ + \084\000\084\000\084\000\084\000\084\000\084\000\084\000\084\000\ + \084\000\084\000\084\000\084\000\084\000\084\000\085\000\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\085\000\ + \255\255\255\255\085\000\085\000\085\000\085\000\085\000\085\000\ + \085\000\085\000\085\000\085\000\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\085\000\085\000\085\000\085\000\085\000\ + \085\000\085\000\085\000\085\000\085\000\085\000\085\000\085\000\ + \085\000\085\000\085\000\085\000\085\000\085\000\085\000\085\000\ + \085\000\085\000\085\000\085\000\085\000\255\255\255\255\255\255\ + \255\255\085\000\255\255\085\000\085\000\085\000\085\000\085\000\ + \085\000\085\000\085\000\085\000\085\000\085\000\085\000\085\000\ + \085\000\085\000\085\000\085\000\085\000\085\000\085\000\085\000\ + \085\000\085\000\085\000\085\000\085\000\086\000\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\086\000\255\255\ + \255\255\086\000\086\000\086\000\086\000\086\000\086\000\086\000\ + \086\000\086\000\086\000\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\086\000\086\000\086\000\086\000\086\000\086\000\ + \086\000\086\000\086\000\086\000\086\000\086\000\086\000\086\000\ + \086\000\086\000\086\000\086\000\086\000\086\000\086\000\086\000\ + \086\000\086\000\086\000\086\000\255\255\255\255\255\255\255\255\ + \086\000\255\255\086\000\086\000\086\000\086\000\086\000\086\000\ + \086\000\086\000\086\000\086\000\086\000\086\000\086\000\086\000\ + \086\000\086\000\086\000\086\000\086\000\086\000\086\000\086\000\ + \086\000\086\000\086\000\086\000\087\000\087\000\087\000\087\000\ + \087\000\087\000\087\000\087\000\087\000\087\000\088\000\255\255\ + \088\000\088\000\088\000\088\000\088\000\088\000\088\000\088\000\ + \088\000\088\000\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ @@ -1676,7 +1742,7 @@ let __ocaml_lex_tables = { \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ - \255\255\255\255\255\255\255\255"; + \255\255"; Lexing.lex_base_code = ""; Lexing.lex_backtrk_code = @@ -1698,131 +1764,141 @@ and __ocaml_lex_initial_rec lexbuf __ocaml_lex_state = | 0 -> # 26 "compiler/lib/annot_lexer.mll" (TProvides) -# 1702 "compiler/lib/annot_lexer.ml" +# 1768 "compiler/lib/annot_lexer.ml" | 1 -> # 27 "compiler/lib/annot_lexer.mll" (TRequires) -# 1707 "compiler/lib/annot_lexer.ml" +# 1773 "compiler/lib/annot_lexer.ml" | 2 -> # 28 "compiler/lib/annot_lexer.mll" (TA_Pure ) -# 1712 "compiler/lib/annot_lexer.ml" +# 1778 "compiler/lib/annot_lexer.ml" | 3 -> # 29 "compiler/lib/annot_lexer.mll" (TA_Const ) -# 1717 "compiler/lib/annot_lexer.ml" +# 1783 "compiler/lib/annot_lexer.ml" | 4 -> # 30 "compiler/lib/annot_lexer.mll" (TA_Mutable ) -# 1722 "compiler/lib/annot_lexer.ml" +# 1788 "compiler/lib/annot_lexer.ml" | 5 -> # 31 "compiler/lib/annot_lexer.mll" (TA_Mutator ) -# 1727 "compiler/lib/annot_lexer.ml" +# 1793 "compiler/lib/annot_lexer.ml" | 6 -> # 32 "compiler/lib/annot_lexer.mll" (TA_Shallow) -# 1732 "compiler/lib/annot_lexer.ml" +# 1798 "compiler/lib/annot_lexer.ml" | 7 -> # 33 "compiler/lib/annot_lexer.mll" (TA_Object_literal) -# 1737 "compiler/lib/annot_lexer.ml" +# 1803 "compiler/lib/annot_lexer.ml" | 8 -> # 34 "compiler/lib/annot_lexer.mll" (TVersion) -# 1742 "compiler/lib/annot_lexer.ml" +# 1808 "compiler/lib/annot_lexer.ml" | 9 -> # 35 "compiler/lib/annot_lexer.mll" (TWeakdef) -# 1747 "compiler/lib/annot_lexer.ml" +# 1813 "compiler/lib/annot_lexer.ml" | 10 -> # 36 "compiler/lib/annot_lexer.mll" - ( - let x = Lexing.lexeme lexbuf in - TIdent x) -# 1754 "compiler/lib/annot_lexer.ml" + (TIf) +# 1818 "compiler/lib/annot_lexer.ml" | 11 -> -# 39 "compiler/lib/annot_lexer.mll" - ( - let x = Lexing.lexeme lexbuf in - TVNum x) -# 1761 "compiler/lib/annot_lexer.ml" +# 37 "compiler/lib/annot_lexer.mll" + (TBang) +# 1823 "compiler/lib/annot_lexer.ml" | 12 -> -# 42 "compiler/lib/annot_lexer.mll" - (LPARENT) -# 1766 "compiler/lib/annot_lexer.ml" +# 38 "compiler/lib/annot_lexer.mll" + ( + let x = Lexing.lexeme lexbuf in + TIdent x) +# 1830 "compiler/lib/annot_lexer.ml" | 13 -> -# 43 "compiler/lib/annot_lexer.mll" - (RPARENT) -# 1771 "compiler/lib/annot_lexer.ml" +# 41 "compiler/lib/annot_lexer.mll" + ( + let x = Lexing.lexeme lexbuf in + TVNum x) +# 1837 "compiler/lib/annot_lexer.ml" | 14 -> # 44 "compiler/lib/annot_lexer.mll" - (TComma) -# 1776 "compiler/lib/annot_lexer.ml" + (LPARENT) +# 1842 "compiler/lib/annot_lexer.ml" | 15 -> # 45 "compiler/lib/annot_lexer.mll" - (TSemi) -# 1781 "compiler/lib/annot_lexer.ml" + (RPARENT) +# 1847 "compiler/lib/annot_lexer.ml" | 16 -> # 46 "compiler/lib/annot_lexer.mll" - (LE) -# 1786 "compiler/lib/annot_lexer.ml" + (TComma) +# 1852 "compiler/lib/annot_lexer.ml" | 17 -> # 47 "compiler/lib/annot_lexer.mll" - (LT) -# 1791 "compiler/lib/annot_lexer.ml" + (TSemi) +# 1857 "compiler/lib/annot_lexer.ml" | 18 -> # 48 "compiler/lib/annot_lexer.mll" - (GT) -# 1796 "compiler/lib/annot_lexer.ml" + (LE) +# 1862 "compiler/lib/annot_lexer.ml" | 19 -> # 49 "compiler/lib/annot_lexer.mll" - (GE) -# 1801 "compiler/lib/annot_lexer.ml" + (LT) +# 1867 "compiler/lib/annot_lexer.ml" | 20 -> # 50 "compiler/lib/annot_lexer.mll" - (EQ) -# 1806 "compiler/lib/annot_lexer.ml" + (GT) +# 1872 "compiler/lib/annot_lexer.ml" | 21 -> # 51 "compiler/lib/annot_lexer.mll" - ( initial lexbuf ) -# 1811 "compiler/lib/annot_lexer.ml" + (GE) +# 1877 "compiler/lib/annot_lexer.ml" | 22 -> # 52 "compiler/lib/annot_lexer.mll" - ( EOF ) -# 1816 "compiler/lib/annot_lexer.ml" + (EQ) +# 1882 "compiler/lib/annot_lexer.ml" | 23 -> # 53 "compiler/lib/annot_lexer.mll" - (EOL) -# 1821 "compiler/lib/annot_lexer.ml" + ( initial lexbuf ) +# 1887 "compiler/lib/annot_lexer.ml" | 24 -> # 54 "compiler/lib/annot_lexer.mll" + ( EOF ) +# 1892 "compiler/lib/annot_lexer.ml" + + | 25 -> +# 55 "compiler/lib/annot_lexer.mll" + (EOL) +# 1897 "compiler/lib/annot_lexer.ml" + + | 26 -> +# 56 "compiler/lib/annot_lexer.mll" ( TOTHER(Lexing.lexeme lexbuf) ) -# 1826 "compiler/lib/annot_lexer.ml" +# 1902 "compiler/lib/annot_lexer.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_initial_rec lexbuf __ocaml_lex_state diff --git a/compiler/lib/annot_lexer.mll b/compiler/lib/annot_lexer.mll index 3c1fdc4f82..4119f6393f 100644 --- a/compiler/lib/annot_lexer.mll +++ b/compiler/lib/annot_lexer.mll @@ -33,7 +33,9 @@ rule initial = parse | "object_literal" {TA_Object_literal} | "Version" {TVersion} | "Weakdef" {TWeakdef} - | ['a'-'z''A'-'Z''$''_']['a'-'z''A'-'Z''$''_''0'-'9']* { + | "If" {TIf} + | "!" {TBang} + | ['a'-'z''A'-'Z''$''_']['a'-'z''A'-'Z''$''_''-''0'-'9']* { let x = Lexing.lexeme lexbuf in TIdent x} | ['0'-'9']+ ('.' (['0'-'9']+)) * { diff --git a/compiler/lib/annot_parser.ml b/compiler/lib/annot_parser.ml index 9310357925..bc242dfaa8 100644 --- a/compiler/lib/annot_parser.ml +++ b/compiler/lib/annot_parser.ml @@ -19,12 +19,14 @@ module MenhirBasics = struct (string) # 21 "annot_parser.ml" ) + | TIf | TIdent of ( # 22 "annot_parser.mly" (string) -# 26 "annot_parser.ml" +# 27 "annot_parser.ml" ) | TComma + | TBang | TA_Shallow | TA_Pure | TA_Object_literal @@ -56,6 +58,8 @@ type _menhir_env = { } and _menhir_state = + | MenhirState53 + | MenhirState50 | MenhirState46 | MenhirState44 | MenhirState35 @@ -66,115 +70,31 @@ and _menhir_state = | MenhirState10 | MenhirState3 -let rec _menhir_goto_endline : _menhir_env -> 'ttv_tail -> _menhir_state -> 'tv_endline -> 'ttv_return = - fun _menhir_env _menhir_stack _menhir_s _v -> - match _menhir_s with - | MenhirState14 -> - let (_menhir_env : _menhir_env) = _menhir_env in - let (_menhir_stack : (('freshtv175)) * _menhir_state * 'tv_separated_nonempty_list_TComma_version_) = Obj.magic _menhir_stack in - let (_menhir_s : _menhir_state) = _menhir_s in - let (_v : 'tv_endline) = _v in - ((let (_menhir_env : _menhir_env) = _menhir_env in - let (_menhir_stack : (('freshtv173)) * _menhir_state * 'tv_separated_nonempty_list_TComma_version_) = Obj.magic _menhir_stack in - let (_ : _menhir_state) = _menhir_s in - let ((_4 : 'tv_endline) : 'tv_endline) = _v in - ((let (_menhir_stack, _, (l : 'tv_separated_nonempty_list_TComma_version_)) = _menhir_stack in - let _2 = () in - let _1 = () in - let _v : ( -# 27 "annot_parser.mly" - (Primitive.t) -# 88 "annot_parser.ml" - ) = -# 39 "annot_parser.mly" - ( `Version (None,l) ) -# 92 "annot_parser.ml" - in - _menhir_goto_annot _menhir_env _menhir_stack _v) : 'freshtv174)) : 'freshtv176) - | MenhirState24 -> - let (_menhir_env : _menhir_env) = _menhir_env in - let (_menhir_stack : (('freshtv179)) * _menhir_state * 'tv_separated_nonempty_list_TComma_TIdent_) = Obj.magic _menhir_stack in - let (_menhir_s : _menhir_state) = _menhir_s in - let (_v : 'tv_endline) = _v in - ((let (_menhir_env : _menhir_env) = _menhir_env in - let (_menhir_stack : (('freshtv177)) * _menhir_state * 'tv_separated_nonempty_list_TComma_TIdent_) = Obj.magic _menhir_stack in - let (_ : _menhir_state) = _menhir_s in - let ((_4 : 'tv_endline) : 'tv_endline) = _v in - ((let (_menhir_stack, _, (l : 'tv_separated_nonempty_list_TComma_TIdent_)) = _menhir_stack in - let _2 = () in - let _1 = () in - let _v : ( -# 27 "annot_parser.mly" - (Primitive.t) -# 110 "annot_parser.ml" - ) = -# 37 "annot_parser.mly" - ( `Requires (None,l) ) -# 114 "annot_parser.ml" - in - _menhir_goto_annot _menhir_env _menhir_stack _v) : 'freshtv178)) : 'freshtv180) - | MenhirState46 -> - let (_menhir_env : _menhir_env) = _menhir_env in - let (_menhir_stack : (((('freshtv183)) * ( -# 22 "annot_parser.mly" - (string) -# 122 "annot_parser.ml" - )) * 'tv_option_prim_annot_) * 'tv_option_delimited_LPARENT_separated_list_TComma_arg_annot__RPARENT__) = Obj.magic _menhir_stack in - let (_menhir_s : _menhir_state) = _menhir_s in - let (_v : 'tv_endline) = _v in - ((let (_menhir_env : _menhir_env) = _menhir_env in - let (_menhir_stack : (((('freshtv181)) * ( -# 22 "annot_parser.mly" - (string) -# 130 "annot_parser.ml" - )) * 'tv_option_prim_annot_) * 'tv_option_delimited_LPARENT_separated_list_TComma_arg_annot__RPARENT__) = Obj.magic _menhir_stack in - let (_ : _menhir_state) = _menhir_s in - let ((_6 : 'tv_endline) : 'tv_endline) = _v in - ((let (((_menhir_stack, (id : ( -# 22 "annot_parser.mly" - (string) -# 137 "annot_parser.ml" - ))), (opt : 'tv_option_prim_annot_)), (args : 'tv_option_delimited_LPARENT_separated_list_TComma_arg_annot__RPARENT__)) = _menhir_stack in - let _2 = () in - let _1 = () in - let _v : ( -# 27 "annot_parser.mly" - (Primitive.t) -# 144 "annot_parser.ml" - ) = -# 35 "annot_parser.mly" - ( `Provides (None,id,(match opt with None -> `Mutator | Some k -> k),args) ) -# 148 "annot_parser.ml" - in - _menhir_goto_annot _menhir_env _menhir_stack _v) : 'freshtv182)) : 'freshtv184) - | _ -> - _menhir_fail () - -and _menhir_goto_separated_nonempty_list_TComma_arg_annot_ : _menhir_env -> 'ttv_tail -> _menhir_state -> 'tv_separated_nonempty_list_TComma_arg_annot_ -> 'ttv_return = +let rec _menhir_goto_separated_nonempty_list_TComma_arg_annot_ : _menhir_env -> 'ttv_tail -> _menhir_state -> 'tv_separated_nonempty_list_TComma_arg_annot_ -> 'ttv_return = fun _menhir_env _menhir_stack _menhir_s _v -> match _menhir_s with | MenhirState35 -> let (_menhir_env : _menhir_env) = _menhir_env in - let (_menhir_stack : 'freshtv167) = Obj.magic _menhir_stack in + let (_menhir_stack : 'freshtv207) = Obj.magic _menhir_stack in let (_menhir_s : _menhir_state) = _menhir_s in let (_v : 'tv_separated_nonempty_list_TComma_arg_annot_) = _v in ((let (_menhir_env : _menhir_env) = _menhir_env in - let (_menhir_stack : 'freshtv165) = Obj.magic _menhir_stack in + let (_menhir_stack : 'freshtv205) = Obj.magic _menhir_stack in let (_menhir_s : _menhir_state) = _menhir_s in let ((x : 'tv_separated_nonempty_list_TComma_arg_annot_) : 'tv_separated_nonempty_list_TComma_arg_annot_) = _v in ((let _v : 'tv_loption_separated_nonempty_list_TComma_arg_annot__ = # 144 "" ( x ) -# 169 "annot_parser.ml" +# 89 "annot_parser.ml" in - _menhir_goto_loption_separated_nonempty_list_TComma_arg_annot__ _menhir_env _menhir_stack _menhir_s _v) : 'freshtv166)) : 'freshtv168) + _menhir_goto_loption_separated_nonempty_list_TComma_arg_annot__ _menhir_env _menhir_stack _menhir_s _v) : 'freshtv206)) : 'freshtv208) | MenhirState44 -> let (_menhir_env : _menhir_env) = _menhir_env in - let (_menhir_stack : ('freshtv171 * _menhir_state * 'tv_arg_annot)) = Obj.magic _menhir_stack in + let (_menhir_stack : ('freshtv211 * _menhir_state * 'tv_arg_annot)) = Obj.magic _menhir_stack in let (_menhir_s : _menhir_state) = _menhir_s in let (_v : 'tv_separated_nonempty_list_TComma_arg_annot_) = _v in ((let (_menhir_env : _menhir_env) = _menhir_env in - let (_menhir_stack : ('freshtv169 * _menhir_state * 'tv_arg_annot)) = Obj.magic _menhir_stack in + let (_menhir_stack : ('freshtv209 * _menhir_state * 'tv_arg_annot)) = Obj.magic _menhir_stack in let (_ : _menhir_state) = _menhir_s in let ((xs : 'tv_separated_nonempty_list_TComma_arg_annot_) : 'tv_separated_nonempty_list_TComma_arg_annot_) = _v in ((let (_menhir_stack, _menhir_s, (x : 'tv_arg_annot)) = _menhir_stack in @@ -182,9 +102,9 @@ and _menhir_goto_separated_nonempty_list_TComma_arg_annot_ : _menhir_env -> 'ttv let _v : 'tv_separated_nonempty_list_TComma_arg_annot_ = # 243 "" ( x :: xs ) -# 186 "annot_parser.ml" +# 106 "annot_parser.ml" in - _menhir_goto_separated_nonempty_list_TComma_arg_annot_ _menhir_env _menhir_stack _menhir_s _v) : 'freshtv170)) : 'freshtv172) + _menhir_goto_separated_nonempty_list_TComma_arg_annot_ _menhir_env _menhir_stack _menhir_s _v) : 'freshtv210)) : 'freshtv212) | _ -> _menhir_fail () @@ -194,20 +114,20 @@ and _menhir_goto_separated_nonempty_list_TComma_version_ : _menhir_env -> 'ttv_t match _menhir_s with | MenhirState10 -> let (_menhir_env : _menhir_env) = _menhir_env in - let (_menhir_stack : (('freshtv161 * _menhir_state * 'tv_version)) * _menhir_state * 'tv_separated_nonempty_list_TComma_version_) = Obj.magic _menhir_stack in + let (_menhir_stack : (('freshtv201 * _menhir_state * 'tv_version)) * _menhir_state * 'tv_separated_nonempty_list_TComma_version_) = Obj.magic _menhir_stack in ((let (_menhir_env : _menhir_env) = _menhir_env in - let (_menhir_stack : (('freshtv159 * _menhir_state * 'tv_version)) * _menhir_state * 'tv_separated_nonempty_list_TComma_version_) = Obj.magic _menhir_stack in + let (_menhir_stack : (('freshtv199 * _menhir_state * 'tv_version)) * _menhir_state * 'tv_separated_nonempty_list_TComma_version_) = Obj.magic _menhir_stack in ((let ((_menhir_stack, _menhir_s, (x : 'tv_version)), _, (xs : 'tv_separated_nonempty_list_TComma_version_)) = _menhir_stack in let _2 = () in let _v : 'tv_separated_nonempty_list_TComma_version_ = # 243 "" ( x :: xs ) -# 206 "annot_parser.ml" +# 126 "annot_parser.ml" in - _menhir_goto_separated_nonempty_list_TComma_version_ _menhir_env _menhir_stack _menhir_s _v) : 'freshtv160)) : 'freshtv162) + _menhir_goto_separated_nonempty_list_TComma_version_ _menhir_env _menhir_stack _menhir_s _v) : 'freshtv200)) : 'freshtv202) | MenhirState3 -> let (_menhir_env : _menhir_env) = _menhir_env in - let (_menhir_stack : (('freshtv163)) * _menhir_state * 'tv_separated_nonempty_list_TComma_version_) = Obj.magic _menhir_stack in + let (_menhir_stack : (('freshtv203)) * _menhir_state * 'tv_separated_nonempty_list_TComma_version_) = Obj.magic _menhir_stack in ((assert (not _menhir_env._menhir_error); let _tok = _menhir_env._menhir_token in match _tok with @@ -220,77 +140,21 @@ and _menhir_goto_separated_nonempty_list_TComma_version_ : _menhir_env -> 'ttv_t | _ -> assert (not _menhir_env._menhir_error); _menhir_env._menhir_error <- true; - _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) MenhirState14) : 'freshtv164) + _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) MenhirState14) : 'freshtv204) | _ -> _menhir_fail () -and _menhir_fail : unit -> 'a = - fun () -> - Printf.fprintf stderr "Internal failure -- please contact the parser generator's developers.\n%!"; - assert false - -and _menhir_run15 : _menhir_env -> 'ttv_tail -> _menhir_state -> ( -# 24 "annot_parser.mly" - (string) -# 236 "annot_parser.ml" -) -> 'ttv_return = - fun _menhir_env _menhir_stack _menhir_s _v -> - let (_menhir_env : _menhir_env) = _menhir_env in - let (_menhir_stack : 'freshtv157) = Obj.magic _menhir_stack in - let (_menhir_s : _menhir_state) = _menhir_s in - let ((_1 : ( -# 24 "annot_parser.mly" - (string) -# 245 "annot_parser.ml" - )) : ( -# 24 "annot_parser.mly" - (string) -# 249 "annot_parser.ml" - )) = _v in - ((let _v : 'tv_endline = -# 67 "annot_parser.mly" - ( failwith _1 ) -# 254 "annot_parser.ml" - in - _menhir_goto_endline _menhir_env _menhir_stack _menhir_s _v) : 'freshtv158) - -and _menhir_run16 : _menhir_env -> 'ttv_tail -> _menhir_state -> 'ttv_return = - fun _menhir_env _menhir_stack _menhir_s -> - let (_menhir_env : _menhir_env) = _menhir_env in - let (_menhir_stack : 'freshtv155) = Obj.magic _menhir_stack in - let (_menhir_s : _menhir_state) = _menhir_s in - ((let _1 = () in - let _v : 'tv_endline = -# 65 "annot_parser.mly" - ( () ) -# 267 "annot_parser.ml" - in - _menhir_goto_endline _menhir_env _menhir_stack _menhir_s _v) : 'freshtv156) - -and _menhir_run17 : _menhir_env -> 'ttv_tail -> _menhir_state -> 'ttv_return = - fun _menhir_env _menhir_stack _menhir_s -> - let (_menhir_env : _menhir_env) = _menhir_env in - let (_menhir_stack : 'freshtv153) = Obj.magic _menhir_stack in - let (_menhir_s : _menhir_state) = _menhir_s in - ((let _1 = () in - let _v : 'tv_endline = -# 66 "annot_parser.mly" - ( () ) -# 280 "annot_parser.ml" - in - _menhir_goto_endline _menhir_env _menhir_stack _menhir_s _v) : 'freshtv154) - and _menhir_goto_arg_annot : _menhir_env -> 'ttv_tail -> _menhir_state -> 'tv_arg_annot -> 'ttv_return = fun _menhir_env _menhir_stack _menhir_s _v -> let _menhir_stack = (_menhir_stack, _menhir_s, _v) in let (_menhir_env : _menhir_env) = _menhir_env in - let (_menhir_stack : 'freshtv151 * _menhir_state * 'tv_arg_annot) = Obj.magic _menhir_stack in + let (_menhir_stack : 'freshtv197 * _menhir_state * 'tv_arg_annot) = Obj.magic _menhir_stack in ((assert (not _menhir_env._menhir_error); let _tok = _menhir_env._menhir_token in match _tok with | TComma -> let (_menhir_env : _menhir_env) = _menhir_env in - let (_menhir_stack : 'freshtv145 * _menhir_state * 'tv_arg_annot) = Obj.magic _menhir_stack in + let (_menhir_stack : 'freshtv191 * _menhir_state * 'tv_arg_annot) = Obj.magic _menhir_stack in ((let _menhir_env = _menhir_discard _menhir_env in let _tok = _menhir_env._menhir_token in match _tok with @@ -305,72 +169,77 @@ and _menhir_goto_arg_annot : _menhir_env -> 'ttv_tail -> _menhir_state -> 'tv_ar | _ -> assert (not _menhir_env._menhir_error); _menhir_env._menhir_error <- true; - _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) MenhirState44) : 'freshtv146) + _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) MenhirState44) : 'freshtv192) | RPARENT -> let (_menhir_env : _menhir_env) = _menhir_env in - let (_menhir_stack : 'freshtv147 * _menhir_state * 'tv_arg_annot) = Obj.magic _menhir_stack in + let (_menhir_stack : 'freshtv193 * _menhir_state * 'tv_arg_annot) = Obj.magic _menhir_stack in ((let (_menhir_stack, _menhir_s, (x : 'tv_arg_annot)) = _menhir_stack in let _v : 'tv_separated_nonempty_list_TComma_arg_annot_ = # 241 "" ( [ x ] ) -# 317 "annot_parser.ml" +# 181 "annot_parser.ml" in - _menhir_goto_separated_nonempty_list_TComma_arg_annot_ _menhir_env _menhir_stack _menhir_s _v) : 'freshtv148) + _menhir_goto_separated_nonempty_list_TComma_arg_annot_ _menhir_env _menhir_stack _menhir_s _v) : 'freshtv194) | _ -> assert (not _menhir_env._menhir_error); _menhir_env._menhir_error <- true; let (_menhir_env : _menhir_env) = _menhir_env in - let (_menhir_stack : 'freshtv149 * _menhir_state * 'tv_arg_annot) = Obj.magic _menhir_stack in + let (_menhir_stack : 'freshtv195 * _menhir_state * 'tv_arg_annot) = Obj.magic _menhir_stack in ((let (_menhir_stack, _menhir_s, _) = _menhir_stack in - _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) _menhir_s) : 'freshtv150)) : 'freshtv152) + _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) _menhir_s) : 'freshtv196)) : 'freshtv198) + +and _menhir_fail : unit -> 'a = + fun () -> + Printf.fprintf stderr "Internal failure -- please contact the parser generator's developers.\n%!"; + assert false and _menhir_goto_op : _menhir_env -> 'ttv_tail -> _menhir_state -> 'tv_op -> 'ttv_return = fun _menhir_env _menhir_stack _menhir_s _v -> let _menhir_stack = (_menhir_stack, _menhir_s, _v) in let (_menhir_env : _menhir_env) = _menhir_env in - let (_menhir_stack : 'freshtv143 * _menhir_state * 'tv_op) = Obj.magic _menhir_stack in + let (_menhir_stack : 'freshtv189 * _menhir_state * 'tv_op) = Obj.magic _menhir_stack in ((assert (not _menhir_env._menhir_error); let _tok = _menhir_env._menhir_token in match _tok with | TVNum _v -> let (_menhir_env : _menhir_env) = _menhir_env in - let (_menhir_stack : 'freshtv139 * _menhir_state * 'tv_op) = Obj.magic _menhir_stack in + let (_menhir_stack : 'freshtv185 * _menhir_state * 'tv_op) = Obj.magic _menhir_stack in let (_v : ( # 22 "annot_parser.mly" (string) -# 342 "annot_parser.ml" +# 211 "annot_parser.ml" )) = _v in ((let _menhir_env = _menhir_discard _menhir_env in let (_menhir_env : _menhir_env) = _menhir_env in - let (_menhir_stack : 'freshtv137 * _menhir_state * 'tv_op) = Obj.magic _menhir_stack in + let (_menhir_stack : 'freshtv183 * _menhir_state * 'tv_op) = Obj.magic _menhir_stack in let ((_2 : ( # 22 "annot_parser.mly" (string) -# 350 "annot_parser.ml" +# 219 "annot_parser.ml" )) : ( # 22 "annot_parser.mly" (string) -# 354 "annot_parser.ml" +# 223 "annot_parser.ml" )) = _v in ((let (_menhir_stack, _menhir_s, (_1 : 'tv_op)) = _menhir_stack in let _v : 'tv_version = -# 62 "annot_parser.mly" +# 66 "annot_parser.mly" ( _1,_2 ) -# 360 "annot_parser.ml" +# 229 "annot_parser.ml" in let (_menhir_env : _menhir_env) = _menhir_env in - let (_menhir_stack : 'freshtv135) = _menhir_stack in + let (_menhir_stack : 'freshtv181) = _menhir_stack in let (_menhir_s : _menhir_state) = _menhir_s in let (_v : 'tv_version) = _v in ((let _menhir_stack = (_menhir_stack, _menhir_s, _v) in let (_menhir_env : _menhir_env) = _menhir_env in - let (_menhir_stack : 'freshtv133 * _menhir_state * 'tv_version) = Obj.magic _menhir_stack in + let (_menhir_stack : 'freshtv179 * _menhir_state * 'tv_version) = Obj.magic _menhir_stack in ((assert (not _menhir_env._menhir_error); let _tok = _menhir_env._menhir_token in match _tok with | TComma -> let (_menhir_env : _menhir_env) = _menhir_env in - let (_menhir_stack : 'freshtv127 * _menhir_state * 'tv_version) = Obj.magic _menhir_stack in + let (_menhir_stack : 'freshtv173 * _menhir_state * 'tv_version) = Obj.magic _menhir_stack in ((let _menhir_env = _menhir_discard _menhir_env in let _tok = _menhir_env._menhir_token in match _tok with @@ -387,31 +256,31 @@ and _menhir_goto_op : _menhir_env -> 'ttv_tail -> _menhir_state -> 'tv_op -> 'tt | _ -> assert (not _menhir_env._menhir_error); _menhir_env._menhir_error <- true; - _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) MenhirState10) : 'freshtv128) + _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) MenhirState10) : 'freshtv174) | EOF | EOL | TOTHER _ -> let (_menhir_env : _menhir_env) = _menhir_env in - let (_menhir_stack : 'freshtv129 * _menhir_state * 'tv_version) = Obj.magic _menhir_stack in + let (_menhir_stack : 'freshtv175 * _menhir_state * 'tv_version) = Obj.magic _menhir_stack in ((let (_menhir_stack, _menhir_s, (x : 'tv_version)) = _menhir_stack in let _v : 'tv_separated_nonempty_list_TComma_version_ = # 241 "" ( [ x ] ) -# 399 "annot_parser.ml" +# 268 "annot_parser.ml" in - _menhir_goto_separated_nonempty_list_TComma_version_ _menhir_env _menhir_stack _menhir_s _v) : 'freshtv130) + _menhir_goto_separated_nonempty_list_TComma_version_ _menhir_env _menhir_stack _menhir_s _v) : 'freshtv176) | _ -> assert (not _menhir_env._menhir_error); _menhir_env._menhir_error <- true; let (_menhir_env : _menhir_env) = _menhir_env in - let (_menhir_stack : 'freshtv131 * _menhir_state * 'tv_version) = Obj.magic _menhir_stack in + let (_menhir_stack : 'freshtv177 * _menhir_state * 'tv_version) = Obj.magic _menhir_stack in ((let (_menhir_stack, _menhir_s, _) = _menhir_stack in - _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) _menhir_s) : 'freshtv132)) : 'freshtv134)) : 'freshtv136)) : 'freshtv138)) : 'freshtv140) + _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) _menhir_s) : 'freshtv178)) : 'freshtv180)) : 'freshtv182)) : 'freshtv184)) : 'freshtv186) | _ -> assert (not _menhir_env._menhir_error); _menhir_env._menhir_error <- true; let (_menhir_env : _menhir_env) = _menhir_env in - let (_menhir_stack : 'freshtv141 * _menhir_state * 'tv_op) = Obj.magic _menhir_stack in + let (_menhir_stack : 'freshtv187 * _menhir_state * 'tv_op) = Obj.magic _menhir_stack in ((let (_menhir_stack, _menhir_s, _) = _menhir_stack in - _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) _menhir_s) : 'freshtv142)) : 'freshtv144) + _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) _menhir_s) : 'freshtv188)) : 'freshtv190) and _menhir_goto_separated_nonempty_list_TComma_TIdent_ : _menhir_env -> 'ttv_tail -> _menhir_state -> 'tv_separated_nonempty_list_TComma_TIdent_ -> 'ttv_return = fun _menhir_env _menhir_stack _menhir_s _v -> @@ -419,32 +288,32 @@ and _menhir_goto_separated_nonempty_list_TComma_TIdent_ : _menhir_env -> 'ttv_ta match _menhir_s with | MenhirState22 -> let (_menhir_env : _menhir_env) = _menhir_env in - let (_menhir_stack : (('freshtv123 * _menhir_state * ( + let (_menhir_stack : (('freshtv169 * _menhir_state * ( # 22 "annot_parser.mly" (string) -# 426 "annot_parser.ml" +# 295 "annot_parser.ml" ))) * _menhir_state * 'tv_separated_nonempty_list_TComma_TIdent_) = Obj.magic _menhir_stack in ((let (_menhir_env : _menhir_env) = _menhir_env in - let (_menhir_stack : (('freshtv121 * _menhir_state * ( + let (_menhir_stack : (('freshtv167 * _menhir_state * ( # 22 "annot_parser.mly" (string) -# 432 "annot_parser.ml" +# 301 "annot_parser.ml" ))) * _menhir_state * 'tv_separated_nonempty_list_TComma_TIdent_) = Obj.magic _menhir_stack in ((let ((_menhir_stack, _menhir_s, (x : ( # 22 "annot_parser.mly" (string) -# 437 "annot_parser.ml" +# 306 "annot_parser.ml" ))), _, (xs : 'tv_separated_nonempty_list_TComma_TIdent_)) = _menhir_stack in let _2 = () in let _v : 'tv_separated_nonempty_list_TComma_TIdent_ = # 243 "" ( x :: xs ) -# 443 "annot_parser.ml" +# 312 "annot_parser.ml" in - _menhir_goto_separated_nonempty_list_TComma_TIdent_ _menhir_env _menhir_stack _menhir_s _v) : 'freshtv122)) : 'freshtv124) + _menhir_goto_separated_nonempty_list_TComma_TIdent_ _menhir_env _menhir_stack _menhir_s _v) : 'freshtv168)) : 'freshtv170) | MenhirState20 -> let (_menhir_env : _menhir_env) = _menhir_env in - let (_menhir_stack : (('freshtv125)) * _menhir_state * 'tv_separated_nonempty_list_TComma_TIdent_) = Obj.magic _menhir_stack in + let (_menhir_stack : (('freshtv171)) * _menhir_state * 'tv_separated_nonempty_list_TComma_TIdent_) = Obj.magic _menhir_stack in ((assert (not _menhir_env._menhir_error); let _tok = _menhir_env._menhir_token in match _tok with @@ -457,7 +326,7 @@ and _menhir_goto_separated_nonempty_list_TComma_TIdent_ : _menhir_env -> 'ttv_ta | _ -> assert (not _menhir_env._menhir_error); _menhir_env._menhir_error <- true; - _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) MenhirState24) : 'freshtv126) + _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) MenhirState24) : 'freshtv172) | _ -> _menhir_fail () @@ -465,10 +334,10 @@ and _menhir_goto_option_delimited_LPARENT_separated_list_TComma_arg_annot__RPARE fun _menhir_env _menhir_stack _v -> let _menhir_stack = (_menhir_stack, _v) in let (_menhir_env : _menhir_env) = _menhir_env in - let (_menhir_stack : (((('freshtv119)) * ( + let (_menhir_stack : (((('freshtv165)) * ( # 22 "annot_parser.mly" (string) -# 472 "annot_parser.ml" +# 341 "annot_parser.ml" )) * 'tv_option_prim_annot_) * 'tv_option_delimited_LPARENT_separated_list_TComma_arg_annot__RPARENT__) = Obj.magic _menhir_stack in ((assert (not _menhir_env._menhir_error); let _tok = _menhir_env._menhir_token in @@ -482,22 +351,22 @@ and _menhir_goto_option_delimited_LPARENT_separated_list_TComma_arg_annot__RPARE | _ -> assert (not _menhir_env._menhir_error); _menhir_env._menhir_error <- true; - _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) MenhirState46) : 'freshtv120) + _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) MenhirState46) : 'freshtv166) and _menhir_goto_loption_separated_nonempty_list_TComma_arg_annot__ : _menhir_env -> 'ttv_tail -> _menhir_state -> 'tv_loption_separated_nonempty_list_TComma_arg_annot__ -> 'ttv_return = fun _menhir_env _menhir_stack _menhir_s _v -> let _menhir_stack = (_menhir_stack, _menhir_s, _v) in let (_menhir_env : _menhir_env) = _menhir_env in - let (_menhir_stack : ('freshtv117) * _menhir_state * 'tv_loption_separated_nonempty_list_TComma_arg_annot__) = Obj.magic _menhir_stack in + let (_menhir_stack : ('freshtv163) * _menhir_state * 'tv_loption_separated_nonempty_list_TComma_arg_annot__) = Obj.magic _menhir_stack in ((assert (not _menhir_env._menhir_error); let _tok = _menhir_env._menhir_token in match _tok with | RPARENT -> let (_menhir_env : _menhir_env) = _menhir_env in - let (_menhir_stack : ('freshtv113) * _menhir_state * 'tv_loption_separated_nonempty_list_TComma_arg_annot__) = Obj.magic _menhir_stack in + let (_menhir_stack : ('freshtv159) * _menhir_state * 'tv_loption_separated_nonempty_list_TComma_arg_annot__) = Obj.magic _menhir_stack in ((let _menhir_env = _menhir_discard _menhir_env in let (_menhir_env : _menhir_env) = _menhir_env in - let (_menhir_stack : ('freshtv111) * _menhir_state * 'tv_loption_separated_nonempty_list_TComma_arg_annot__) = Obj.magic _menhir_stack in + let (_menhir_stack : ('freshtv157) * _menhir_state * 'tv_loption_separated_nonempty_list_TComma_arg_annot__) = Obj.magic _menhir_stack in ((let (_menhir_stack, _, (xs : 'tv_loption_separated_nonempty_list_TComma_arg_annot__)) = _menhir_stack in let _3 = () in let _1 = () in @@ -505,237 +374,337 @@ and _menhir_goto_loption_separated_nonempty_list_TComma_arg_annot__ : _menhir_en let x = # 232 "" ( xs ) -# 509 "annot_parser.ml" +# 378 "annot_parser.ml" in # 200 "" ( x ) -# 514 "annot_parser.ml" +# 383 "annot_parser.ml" in # 116 "" ( Some x ) -# 520 "annot_parser.ml" +# 389 "annot_parser.ml" in - _menhir_goto_option_delimited_LPARENT_separated_list_TComma_arg_annot__RPARENT__ _menhir_env _menhir_stack _v) : 'freshtv112)) : 'freshtv114) + _menhir_goto_option_delimited_LPARENT_separated_list_TComma_arg_annot__RPARENT__ _menhir_env _menhir_stack _v) : 'freshtv158)) : 'freshtv160) | _ -> assert (not _menhir_env._menhir_error); _menhir_env._menhir_error <- true; let (_menhir_env : _menhir_env) = _menhir_env in - let (_menhir_stack : ('freshtv115) * _menhir_state * 'tv_loption_separated_nonempty_list_TComma_arg_annot__) = Obj.magic _menhir_stack in + let (_menhir_stack : ('freshtv161) * _menhir_state * 'tv_loption_separated_nonempty_list_TComma_arg_annot__) = Obj.magic _menhir_stack in ((let (_menhir_stack, _menhir_s, _) = _menhir_stack in - _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) _menhir_s) : 'freshtv116)) : 'freshtv118) + _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) _menhir_s) : 'freshtv162)) : 'freshtv164) and _menhir_run36 : _menhir_env -> 'ttv_tail -> _menhir_state -> 'ttv_return = fun _menhir_env _menhir_stack _menhir_s -> let _menhir_env = _menhir_discard _menhir_env in let (_menhir_env : _menhir_env) = _menhir_env in - let (_menhir_stack : 'freshtv109) = Obj.magic _menhir_stack in + let (_menhir_stack : 'freshtv155) = Obj.magic _menhir_stack in let (_menhir_s : _menhir_state) = _menhir_s in ((let _1 = () in let _v : 'tv_arg_annot = -# 50 "annot_parser.mly" +# 54 "annot_parser.mly" ( `Shallow_const) -# 541 "annot_parser.ml" +# 410 "annot_parser.ml" in - _menhir_goto_arg_annot _menhir_env _menhir_stack _menhir_s _v) : 'freshtv110) + _menhir_goto_arg_annot _menhir_env _menhir_stack _menhir_s _v) : 'freshtv156) and _menhir_run37 : _menhir_env -> 'ttv_tail -> _menhir_state -> 'ttv_return = fun _menhir_env _menhir_stack _menhir_s -> let _menhir_env = _menhir_discard _menhir_env in let (_menhir_env : _menhir_env) = _menhir_env in - let (_menhir_stack : 'freshtv107) = Obj.magic _menhir_stack in + let (_menhir_stack : 'freshtv153) = Obj.magic _menhir_stack in let (_menhir_s : _menhir_state) = _menhir_s in ((let _1 = () in let _v : 'tv_arg_annot = -# 51 "annot_parser.mly" +# 55 "annot_parser.mly" ( `Object_literal) -# 555 "annot_parser.ml" +# 424 "annot_parser.ml" in - _menhir_goto_arg_annot _menhir_env _menhir_stack _menhir_s _v) : 'freshtv108) + _menhir_goto_arg_annot _menhir_env _menhir_stack _menhir_s _v) : 'freshtv154) and _menhir_run38 : _menhir_env -> 'ttv_tail -> _menhir_state -> 'ttv_return = fun _menhir_env _menhir_stack _menhir_s -> let _menhir_env = _menhir_discard _menhir_env in let (_menhir_env : _menhir_env) = _menhir_env in - let (_menhir_stack : 'freshtv105) = Obj.magic _menhir_stack in + let (_menhir_stack : 'freshtv151) = Obj.magic _menhir_stack in let (_menhir_s : _menhir_state) = _menhir_s in ((let _1 = () in let _v : 'tv_arg_annot = -# 52 "annot_parser.mly" +# 56 "annot_parser.mly" ( `Mutable) -# 569 "annot_parser.ml" +# 438 "annot_parser.ml" in - _menhir_goto_arg_annot _menhir_env _menhir_stack _menhir_s _v) : 'freshtv106) + _menhir_goto_arg_annot _menhir_env _menhir_stack _menhir_s _v) : 'freshtv152) and _menhir_run39 : _menhir_env -> 'ttv_tail -> _menhir_state -> 'ttv_return = fun _menhir_env _menhir_stack _menhir_s -> let _menhir_env = _menhir_discard _menhir_env in let (_menhir_env : _menhir_env) = _menhir_env in - let (_menhir_stack : 'freshtv103) = Obj.magic _menhir_stack in + let (_menhir_stack : 'freshtv149) = Obj.magic _menhir_stack in let (_menhir_s : _menhir_state) = _menhir_s in ((let _1 = () in let _v : 'tv_arg_annot = -# 49 "annot_parser.mly" +# 53 "annot_parser.mly" ( `Const ) -# 583 "annot_parser.ml" +# 452 "annot_parser.ml" in - _menhir_goto_arg_annot _menhir_env _menhir_stack _menhir_s _v) : 'freshtv104) + _menhir_goto_arg_annot _menhir_env _menhir_stack _menhir_s _v) : 'freshtv150) + +and _menhir_goto_endline : _menhir_env -> 'ttv_tail -> _menhir_state -> 'tv_endline -> 'ttv_return = + fun _menhir_env _menhir_stack _menhir_s _v -> + match _menhir_s with + | MenhirState14 -> + let (_menhir_env : _menhir_env) = _menhir_env in + let (_menhir_stack : (('freshtv131)) * _menhir_state * 'tv_separated_nonempty_list_TComma_version_) = Obj.magic _menhir_stack in + let (_menhir_s : _menhir_state) = _menhir_s in + let (_v : 'tv_endline) = _v in + ((let (_menhir_env : _menhir_env) = _menhir_env in + let (_menhir_stack : (('freshtv129)) * _menhir_state * 'tv_separated_nonempty_list_TComma_version_) = Obj.magic _menhir_stack in + let (_ : _menhir_state) = _menhir_s in + let ((_4 : 'tv_endline) : 'tv_endline) = _v in + ((let (_menhir_stack, _, (l : 'tv_separated_nonempty_list_TComma_version_)) = _menhir_stack in + let _2 = () in + let _1 = () in + let _v : ( +# 28 "annot_parser.mly" + (Primitive.t) +# 474 "annot_parser.ml" + ) = +# 40 "annot_parser.mly" + ( `Version (None,l) ) +# 478 "annot_parser.ml" + in + _menhir_goto_annot _menhir_env _menhir_stack _v) : 'freshtv130)) : 'freshtv132) + | MenhirState24 -> + let (_menhir_env : _menhir_env) = _menhir_env in + let (_menhir_stack : (('freshtv135)) * _menhir_state * 'tv_separated_nonempty_list_TComma_TIdent_) = Obj.magic _menhir_stack in + let (_menhir_s : _menhir_state) = _menhir_s in + let (_v : 'tv_endline) = _v in + ((let (_menhir_env : _menhir_env) = _menhir_env in + let (_menhir_stack : (('freshtv133)) * _menhir_state * 'tv_separated_nonempty_list_TComma_TIdent_) = Obj.magic _menhir_stack in + let (_ : _menhir_state) = _menhir_s in + let ((_4 : 'tv_endline) : 'tv_endline) = _v in + ((let (_menhir_stack, _, (l : 'tv_separated_nonempty_list_TComma_TIdent_)) = _menhir_stack in + let _2 = () in + let _1 = () in + let _v : ( +# 28 "annot_parser.mly" + (Primitive.t) +# 496 "annot_parser.ml" + ) = +# 38 "annot_parser.mly" + ( `Requires (None,l) ) +# 500 "annot_parser.ml" + in + _menhir_goto_annot _menhir_env _menhir_stack _v) : 'freshtv134)) : 'freshtv136) + | MenhirState46 -> + let (_menhir_env : _menhir_env) = _menhir_env in + let (_menhir_stack : (((('freshtv139)) * ( +# 22 "annot_parser.mly" + (string) +# 508 "annot_parser.ml" + )) * 'tv_option_prim_annot_) * 'tv_option_delimited_LPARENT_separated_list_TComma_arg_annot__RPARENT__) = Obj.magic _menhir_stack in + let (_menhir_s : _menhir_state) = _menhir_s in + let (_v : 'tv_endline) = _v in + ((let (_menhir_env : _menhir_env) = _menhir_env in + let (_menhir_stack : (((('freshtv137)) * ( +# 22 "annot_parser.mly" + (string) +# 516 "annot_parser.ml" + )) * 'tv_option_prim_annot_) * 'tv_option_delimited_LPARENT_separated_list_TComma_arg_annot__RPARENT__) = Obj.magic _menhir_stack in + let (_ : _menhir_state) = _menhir_s in + let ((_6 : 'tv_endline) : 'tv_endline) = _v in + ((let (((_menhir_stack, (id : ( +# 22 "annot_parser.mly" + (string) +# 523 "annot_parser.ml" + ))), (opt : 'tv_option_prim_annot_)), (args : 'tv_option_delimited_LPARENT_separated_list_TComma_arg_annot__RPARENT__)) = _menhir_stack in + let _2 = () in + let _1 = () in + let _v : ( +# 28 "annot_parser.mly" + (Primitive.t) +# 530 "annot_parser.ml" + ) = +# 36 "annot_parser.mly" + ( `Provides (None,id,(match opt with None -> `Mutator | Some k -> k),args) ) +# 534 "annot_parser.ml" + in + _menhir_goto_annot _menhir_env _menhir_stack _v) : 'freshtv138)) : 'freshtv140) + | MenhirState50 -> + let (_menhir_env : _menhir_env) = _menhir_env in + let (_menhir_stack : (('freshtv143)) * ( +# 22 "annot_parser.mly" + (string) +# 542 "annot_parser.ml" + )) = Obj.magic _menhir_stack in + let (_menhir_s : _menhir_state) = _menhir_s in + let (_v : 'tv_endline) = _v in + ((let (_menhir_env : _menhir_env) = _menhir_env in + let (_menhir_stack : (('freshtv141)) * ( +# 22 "annot_parser.mly" + (string) +# 550 "annot_parser.ml" + )) = Obj.magic _menhir_stack in + let (_ : _menhir_state) = _menhir_s in + let ((_4 : 'tv_endline) : 'tv_endline) = _v in + ((let (_menhir_stack, (name : ( +# 22 "annot_parser.mly" + (string) +# 557 "annot_parser.ml" + ))) = _menhir_stack in + let _2 = () in + let _1 = () in + let _v : ( +# 28 "annot_parser.mly" + (Primitive.t) +# 564 "annot_parser.ml" + ) = +# 43 "annot_parser.mly" + ( `If (None,name) ) +# 568 "annot_parser.ml" + in + _menhir_goto_annot _menhir_env _menhir_stack _v) : 'freshtv142)) : 'freshtv144) + | MenhirState53 -> + let (_menhir_env : _menhir_env) = _menhir_env in + let (_menhir_stack : ((('freshtv147))) * ( +# 22 "annot_parser.mly" + (string) +# 576 "annot_parser.ml" + )) = Obj.magic _menhir_stack in + let (_menhir_s : _menhir_state) = _menhir_s in + let (_v : 'tv_endline) = _v in + ((let (_menhir_env : _menhir_env) = _menhir_env in + let (_menhir_stack : ((('freshtv145))) * ( +# 22 "annot_parser.mly" + (string) +# 584 "annot_parser.ml" + )) = Obj.magic _menhir_stack in + let (_ : _menhir_state) = _menhir_s in + let ((_5 : 'tv_endline) : 'tv_endline) = _v in + ((let (_menhir_stack, (name : ( +# 22 "annot_parser.mly" + (string) +# 591 "annot_parser.ml" + ))) = _menhir_stack in + let _3 = () in + let _2 = () in + let _1 = () in + let _v : ( +# 28 "annot_parser.mly" + (Primitive.t) +# 599 "annot_parser.ml" + ) = +# 45 "annot_parser.mly" + ( `Ifnot (None,name) ) +# 603 "annot_parser.ml" + in + _menhir_goto_annot _menhir_env _menhir_stack _v) : 'freshtv146)) : 'freshtv148) + | _ -> + _menhir_fail () and _menhir_goto_annot : _menhir_env -> 'ttv_tail -> ( -# 27 "annot_parser.mly" +# 28 "annot_parser.mly" (Primitive.t) -# 590 "annot_parser.ml" +# 612 "annot_parser.ml" ) -> 'ttv_return = fun _menhir_env _menhir_stack _v -> let (_menhir_env : _menhir_env) = _menhir_env in - let (_menhir_stack : 'freshtv101) = Obj.magic _menhir_stack in + let (_menhir_stack : 'freshtv127) = Obj.magic _menhir_stack in let (_v : ( -# 27 "annot_parser.mly" +# 28 "annot_parser.mly" (Primitive.t) -# 598 "annot_parser.ml" +# 620 "annot_parser.ml" )) = _v in ((let (_menhir_env : _menhir_env) = _menhir_env in - let (_menhir_stack : 'freshtv99) = Obj.magic _menhir_stack in + let (_menhir_stack : 'freshtv125) = Obj.magic _menhir_stack in let ((_1 : ( -# 27 "annot_parser.mly" +# 28 "annot_parser.mly" (Primitive.t) -# 605 "annot_parser.ml" +# 627 "annot_parser.ml" )) : ( -# 27 "annot_parser.mly" +# 28 "annot_parser.mly" (Primitive.t) -# 609 "annot_parser.ml" +# 631 "annot_parser.ml" )) = _v in - (Obj.magic _1 : 'freshtv100)) : 'freshtv102) + (Obj.magic _1 : 'freshtv126)) : 'freshtv128) and _menhir_run4 : _menhir_env -> 'ttv_tail -> _menhir_state -> 'ttv_return = fun _menhir_env _menhir_stack _menhir_s -> let _menhir_env = _menhir_discard _menhir_env in let (_menhir_env : _menhir_env) = _menhir_env in - let (_menhir_stack : 'freshtv97) = Obj.magic _menhir_stack in + let (_menhir_stack : 'freshtv123) = Obj.magic _menhir_stack in let (_menhir_s : _menhir_state) = _menhir_s in ((let _1 = () in let _v : 'tv_op = -# 56 "annot_parser.mly" +# 60 "annot_parser.mly" ((<)) -# 623 "annot_parser.ml" +# 645 "annot_parser.ml" in - _menhir_goto_op _menhir_env _menhir_stack _menhir_s _v) : 'freshtv98) + _menhir_goto_op _menhir_env _menhir_stack _menhir_s _v) : 'freshtv124) and _menhir_run5 : _menhir_env -> 'ttv_tail -> _menhir_state -> 'ttv_return = fun _menhir_env _menhir_stack _menhir_s -> let _menhir_env = _menhir_discard _menhir_env in let (_menhir_env : _menhir_env) = _menhir_env in - let (_menhir_stack : 'freshtv95) = Obj.magic _menhir_stack in + let (_menhir_stack : 'freshtv121) = Obj.magic _menhir_stack in let (_menhir_s : _menhir_state) = _menhir_s in ((let _1 = () in let _v : 'tv_op = -# 55 "annot_parser.mly" +# 59 "annot_parser.mly" ((<=)) -# 637 "annot_parser.ml" +# 659 "annot_parser.ml" in - _menhir_goto_op _menhir_env _menhir_stack _menhir_s _v) : 'freshtv96) + _menhir_goto_op _menhir_env _menhir_stack _menhir_s _v) : 'freshtv122) and _menhir_run6 : _menhir_env -> 'ttv_tail -> _menhir_state -> 'ttv_return = fun _menhir_env _menhir_stack _menhir_s -> let _menhir_env = _menhir_discard _menhir_env in let (_menhir_env : _menhir_env) = _menhir_env in - let (_menhir_stack : 'freshtv93) = Obj.magic _menhir_stack in + let (_menhir_stack : 'freshtv119) = Obj.magic _menhir_stack in let (_menhir_s : _menhir_state) = _menhir_s in ((let _1 = () in let _v : 'tv_op = -# 57 "annot_parser.mly" +# 61 "annot_parser.mly" ((>)) -# 651 "annot_parser.ml" +# 673 "annot_parser.ml" in - _menhir_goto_op _menhir_env _menhir_stack _menhir_s _v) : 'freshtv94) + _menhir_goto_op _menhir_env _menhir_stack _menhir_s _v) : 'freshtv120) and _menhir_run7 : _menhir_env -> 'ttv_tail -> _menhir_state -> 'ttv_return = fun _menhir_env _menhir_stack _menhir_s -> let _menhir_env = _menhir_discard _menhir_env in let (_menhir_env : _menhir_env) = _menhir_env in - let (_menhir_stack : 'freshtv91) = Obj.magic _menhir_stack in + let (_menhir_stack : 'freshtv117) = Obj.magic _menhir_stack in let (_menhir_s : _menhir_state) = _menhir_s in ((let _1 = () in let _v : 'tv_op = -# 58 "annot_parser.mly" +# 62 "annot_parser.mly" ((>=)) -# 665 "annot_parser.ml" +# 687 "annot_parser.ml" in - _menhir_goto_op _menhir_env _menhir_stack _menhir_s _v) : 'freshtv92) + _menhir_goto_op _menhir_env _menhir_stack _menhir_s _v) : 'freshtv118) and _menhir_run8 : _menhir_env -> 'ttv_tail -> _menhir_state -> 'ttv_return = fun _menhir_env _menhir_stack _menhir_s -> let _menhir_env = _menhir_discard _menhir_env in let (_menhir_env : _menhir_env) = _menhir_env in - let (_menhir_stack : 'freshtv89) = Obj.magic _menhir_stack in + let (_menhir_stack : 'freshtv115) = Obj.magic _menhir_stack in let (_menhir_s : _menhir_state) = _menhir_s in ((let _1 = () in let _v : 'tv_op = -# 59 "annot_parser.mly" +# 63 "annot_parser.mly" ((=)) -# 679 "annot_parser.ml" +# 701 "annot_parser.ml" in - _menhir_goto_op _menhir_env _menhir_stack _menhir_s _v) : 'freshtv90) - -and _menhir_errorcase : _menhir_env -> 'ttv_tail -> _menhir_state -> 'ttv_return = - fun _menhir_env _menhir_stack _menhir_s -> - match _menhir_s with - | MenhirState46 -> - let (_menhir_env : _menhir_env) = _menhir_env in - let (_menhir_stack : (((('freshtv71)) * ( -# 22 "annot_parser.mly" - (string) -# 691 "annot_parser.ml" - )) * 'tv_option_prim_annot_) * 'tv_option_delimited_LPARENT_separated_list_TComma_arg_annot__RPARENT__) = Obj.magic _menhir_stack in - (raise _eRR : 'freshtv72) - | MenhirState44 -> - let (_menhir_env : _menhir_env) = _menhir_env in - let (_menhir_stack : ('freshtv73 * _menhir_state * 'tv_arg_annot)) = Obj.magic _menhir_stack in - ((let (_menhir_stack, _menhir_s, _) = _menhir_stack in - _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) _menhir_s) : 'freshtv74) - | MenhirState35 -> - let (_menhir_env : _menhir_env) = _menhir_env in - let (_menhir_stack : 'freshtv75) = Obj.magic _menhir_stack in - (raise _eRR : 'freshtv76) - | MenhirState24 -> - let (_menhir_env : _menhir_env) = _menhir_env in - let (_menhir_stack : (('freshtv77)) * _menhir_state * 'tv_separated_nonempty_list_TComma_TIdent_) = Obj.magic _menhir_stack in - ((let (_menhir_stack, _menhir_s, _) = _menhir_stack in - _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) _menhir_s) : 'freshtv78) - | MenhirState22 -> - let (_menhir_env : _menhir_env) = _menhir_env in - let (_menhir_stack : ('freshtv79 * _menhir_state * ( -# 22 "annot_parser.mly" - (string) -# 713 "annot_parser.ml" - ))) = Obj.magic _menhir_stack in - ((let (_menhir_stack, _menhir_s, _) = _menhir_stack in - _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) _menhir_s) : 'freshtv80) - | MenhirState20 -> - let (_menhir_env : _menhir_env) = _menhir_env in - let (_menhir_stack : ('freshtv81)) = Obj.magic _menhir_stack in - (raise _eRR : 'freshtv82) - | MenhirState14 -> - let (_menhir_env : _menhir_env) = _menhir_env in - let (_menhir_stack : (('freshtv83)) * _menhir_state * 'tv_separated_nonempty_list_TComma_version_) = Obj.magic _menhir_stack in - ((let (_menhir_stack, _menhir_s, _) = _menhir_stack in - _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) _menhir_s) : 'freshtv84) - | MenhirState10 -> - let (_menhir_env : _menhir_env) = _menhir_env in - let (_menhir_stack : ('freshtv85 * _menhir_state * 'tv_version)) = Obj.magic _menhir_stack in - ((let (_menhir_stack, _menhir_s, _) = _menhir_stack in - _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) _menhir_s) : 'freshtv86) - | MenhirState3 -> - let (_menhir_env : _menhir_env) = _menhir_env in - let (_menhir_stack : ('freshtv87)) = Obj.magic _menhir_stack in - (raise _eRR : 'freshtv88) + _menhir_goto_op _menhir_env _menhir_stack _menhir_s _v) : 'freshtv116) and _menhir_run21 : _menhir_env -> 'ttv_tail -> _menhir_state -> ( # 22 "annot_parser.mly" (string) -# 739 "annot_parser.ml" +# 708 "annot_parser.ml" ) -> 'ttv_return = fun _menhir_env _menhir_stack _menhir_s _v -> let _menhir_stack = (_menhir_stack, _menhir_s, _v) in @@ -744,10 +713,10 @@ and _menhir_run21 : _menhir_env -> 'ttv_tail -> _menhir_state -> ( match _tok with | TComma -> let (_menhir_env : _menhir_env) = _menhir_env in - let (_menhir_stack : 'freshtv65 * _menhir_state * ( + let (_menhir_stack : 'freshtv109 * _menhir_state * ( # 22 "annot_parser.mly" (string) -# 751 "annot_parser.ml" +# 720 "annot_parser.ml" )) = Obj.magic _menhir_stack in ((let _menhir_env = _menhir_discard _menhir_env in let _tok = _menhir_env._menhir_token in @@ -757,52 +726,52 @@ and _menhir_run21 : _menhir_env -> 'ttv_tail -> _menhir_state -> ( | _ -> assert (not _menhir_env._menhir_error); _menhir_env._menhir_error <- true; - _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) MenhirState22) : 'freshtv66) + _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) MenhirState22) : 'freshtv110) | EOF | EOL | TOTHER _ -> let (_menhir_env : _menhir_env) = _menhir_env in - let (_menhir_stack : 'freshtv67 * _menhir_state * ( + let (_menhir_stack : 'freshtv111 * _menhir_state * ( # 22 "annot_parser.mly" (string) -# 767 "annot_parser.ml" +# 736 "annot_parser.ml" )) = Obj.magic _menhir_stack in ((let (_menhir_stack, _menhir_s, (x : ( # 22 "annot_parser.mly" (string) -# 772 "annot_parser.ml" +# 741 "annot_parser.ml" ))) = _menhir_stack in let _v : 'tv_separated_nonempty_list_TComma_TIdent_ = # 241 "" ( [ x ] ) -# 777 "annot_parser.ml" +# 746 "annot_parser.ml" in - _menhir_goto_separated_nonempty_list_TComma_TIdent_ _menhir_env _menhir_stack _menhir_s _v) : 'freshtv68) + _menhir_goto_separated_nonempty_list_TComma_TIdent_ _menhir_env _menhir_stack _menhir_s _v) : 'freshtv112) | _ -> assert (not _menhir_env._menhir_error); _menhir_env._menhir_error <- true; let (_menhir_env : _menhir_env) = _menhir_env in - let (_menhir_stack : 'freshtv69 * _menhir_state * ( + let (_menhir_stack : 'freshtv113 * _menhir_state * ( # 22 "annot_parser.mly" (string) -# 787 "annot_parser.ml" +# 756 "annot_parser.ml" )) = Obj.magic _menhir_stack in ((let (_menhir_stack, _menhir_s, _) = _menhir_stack in - _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) _menhir_s) : 'freshtv70) + _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) _menhir_s) : 'freshtv114) and _menhir_goto_option_prim_annot_ : _menhir_env -> 'ttv_tail -> 'tv_option_prim_annot_ -> 'ttv_return = fun _menhir_env _menhir_stack _v -> let _menhir_stack = (_menhir_stack, _v) in let (_menhir_env : _menhir_env) = _menhir_env in - let (_menhir_stack : ((('freshtv63)) * ( + let (_menhir_stack : ((('freshtv107)) * ( # 22 "annot_parser.mly" (string) -# 799 "annot_parser.ml" +# 768 "annot_parser.ml" )) * 'tv_option_prim_annot_) = Obj.magic _menhir_stack in ((assert (not _menhir_env._menhir_error); let _tok = _menhir_env._menhir_token in match _tok with | LPARENT -> let (_menhir_env : _menhir_env) = _menhir_env in - let (_menhir_stack : 'freshtv57) = Obj.magic _menhir_stack in + let (_menhir_stack : 'freshtv101) = Obj.magic _menhir_stack in ((let _menhir_env = _menhir_discard _menhir_env in let _tok = _menhir_env._menhir_token in match _tok with @@ -816,52 +785,172 @@ and _menhir_goto_option_prim_annot_ : _menhir_env -> 'ttv_tail -> 'tv_option_pri _menhir_run36 _menhir_env (Obj.magic _menhir_stack) MenhirState35 | RPARENT -> let (_menhir_env : _menhir_env) = _menhir_env in - let (_menhir_stack : 'freshtv55) = Obj.magic _menhir_stack in + let (_menhir_stack : 'freshtv99) = Obj.magic _menhir_stack in let (_menhir_s : _menhir_state) = MenhirState35 in ((let _v : 'tv_loption_separated_nonempty_list_TComma_arg_annot__ = # 142 "" ( [] ) -# 825 "annot_parser.ml" +# 794 "annot_parser.ml" in - _menhir_goto_loption_separated_nonempty_list_TComma_arg_annot__ _menhir_env _menhir_stack _menhir_s _v) : 'freshtv56) + _menhir_goto_loption_separated_nonempty_list_TComma_arg_annot__ _menhir_env _menhir_stack _menhir_s _v) : 'freshtv100) | _ -> assert (not _menhir_env._menhir_error); _menhir_env._menhir_error <- true; - _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) MenhirState35) : 'freshtv58) + _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) MenhirState35) : 'freshtv102) | EOF | EOL | TOTHER _ -> let (_menhir_env : _menhir_env) = _menhir_env in - let (_menhir_stack : 'freshtv59) = Obj.magic _menhir_stack in + let (_menhir_stack : 'freshtv103) = Obj.magic _menhir_stack in ((let _v : 'tv_option_delimited_LPARENT_separated_list_TComma_arg_annot__RPARENT__ = # 114 "" ( None ) -# 838 "annot_parser.ml" +# 807 "annot_parser.ml" in - _menhir_goto_option_delimited_LPARENT_separated_list_TComma_arg_annot__RPARENT__ _menhir_env _menhir_stack _v) : 'freshtv60) + _menhir_goto_option_delimited_LPARENT_separated_list_TComma_arg_annot__RPARENT__ _menhir_env _menhir_stack _v) : 'freshtv104) | _ -> assert (not _menhir_env._menhir_error); _menhir_env._menhir_error <- true; let (_menhir_env : _menhir_env) = _menhir_env in - let (_menhir_stack : ((('freshtv61)) * ( + let (_menhir_stack : ((('freshtv105)) * ( # 22 "annot_parser.mly" (string) -# 848 "annot_parser.ml" +# 817 "annot_parser.ml" )) * 'tv_option_prim_annot_) = Obj.magic _menhir_stack in - (raise _eRR : 'freshtv62)) : 'freshtv64) + (raise _eRR : 'freshtv106)) : 'freshtv108) and _menhir_goto_prim_annot : _menhir_env -> 'ttv_tail -> 'tv_prim_annot -> 'ttv_return = fun _menhir_env _menhir_stack _v -> let (_menhir_env : _menhir_env) = _menhir_env in - let (_menhir_stack : 'freshtv53) = Obj.magic _menhir_stack in + let (_menhir_stack : 'freshtv97) = Obj.magic _menhir_stack in let (_v : 'tv_prim_annot) = _v in ((let (_menhir_env : _menhir_env) = _menhir_env in - let (_menhir_stack : 'freshtv51) = Obj.magic _menhir_stack in + let (_menhir_stack : 'freshtv95) = Obj.magic _menhir_stack in let ((x : 'tv_prim_annot) : 'tv_prim_annot) = _v in ((let _v : 'tv_option_prim_annot_ = # 116 "" ( Some x ) -# 863 "annot_parser.ml" +# 832 "annot_parser.ml" in - _menhir_goto_option_prim_annot_ _menhir_env _menhir_stack _v) : 'freshtv52)) : 'freshtv54) + _menhir_goto_option_prim_annot_ _menhir_env _menhir_stack _v) : 'freshtv96)) : 'freshtv98) + +and _menhir_errorcase : _menhir_env -> 'ttv_tail -> _menhir_state -> 'ttv_return = + fun _menhir_env _menhir_stack _menhir_s -> + match _menhir_s with + | MenhirState53 -> + let (_menhir_env : _menhir_env) = _menhir_env in + let (_menhir_stack : ((('freshtv73))) * ( +# 22 "annot_parser.mly" + (string) +# 844 "annot_parser.ml" + )) = Obj.magic _menhir_stack in + (raise _eRR : 'freshtv74) + | MenhirState50 -> + let (_menhir_env : _menhir_env) = _menhir_env in + let (_menhir_stack : (('freshtv75)) * ( +# 22 "annot_parser.mly" + (string) +# 852 "annot_parser.ml" + )) = Obj.magic _menhir_stack in + (raise _eRR : 'freshtv76) + | MenhirState46 -> + let (_menhir_env : _menhir_env) = _menhir_env in + let (_menhir_stack : (((('freshtv77)) * ( +# 22 "annot_parser.mly" + (string) +# 860 "annot_parser.ml" + )) * 'tv_option_prim_annot_) * 'tv_option_delimited_LPARENT_separated_list_TComma_arg_annot__RPARENT__) = Obj.magic _menhir_stack in + (raise _eRR : 'freshtv78) + | MenhirState44 -> + let (_menhir_env : _menhir_env) = _menhir_env in + let (_menhir_stack : ('freshtv79 * _menhir_state * 'tv_arg_annot)) = Obj.magic _menhir_stack in + ((let (_menhir_stack, _menhir_s, _) = _menhir_stack in + _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) _menhir_s) : 'freshtv80) + | MenhirState35 -> + let (_menhir_env : _menhir_env) = _menhir_env in + let (_menhir_stack : 'freshtv81) = Obj.magic _menhir_stack in + (raise _eRR : 'freshtv82) + | MenhirState24 -> + let (_menhir_env : _menhir_env) = _menhir_env in + let (_menhir_stack : (('freshtv83)) * _menhir_state * 'tv_separated_nonempty_list_TComma_TIdent_) = Obj.magic _menhir_stack in + ((let (_menhir_stack, _menhir_s, _) = _menhir_stack in + _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) _menhir_s) : 'freshtv84) + | MenhirState22 -> + let (_menhir_env : _menhir_env) = _menhir_env in + let (_menhir_stack : ('freshtv85 * _menhir_state * ( +# 22 "annot_parser.mly" + (string) +# 882 "annot_parser.ml" + ))) = Obj.magic _menhir_stack in + ((let (_menhir_stack, _menhir_s, _) = _menhir_stack in + _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) _menhir_s) : 'freshtv86) + | MenhirState20 -> + let (_menhir_env : _menhir_env) = _menhir_env in + let (_menhir_stack : ('freshtv87)) = Obj.magic _menhir_stack in + (raise _eRR : 'freshtv88) + | MenhirState14 -> + let (_menhir_env : _menhir_env) = _menhir_env in + let (_menhir_stack : (('freshtv89)) * _menhir_state * 'tv_separated_nonempty_list_TComma_version_) = Obj.magic _menhir_stack in + ((let (_menhir_stack, _menhir_s, _) = _menhir_stack in + _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) _menhir_s) : 'freshtv90) + | MenhirState10 -> + let (_menhir_env : _menhir_env) = _menhir_env in + let (_menhir_stack : ('freshtv91 * _menhir_state * 'tv_version)) = Obj.magic _menhir_stack in + ((let (_menhir_stack, _menhir_s, _) = _menhir_stack in + _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) _menhir_s) : 'freshtv92) + | MenhirState3 -> + let (_menhir_env : _menhir_env) = _menhir_env in + let (_menhir_stack : ('freshtv93)) = Obj.magic _menhir_stack in + (raise _eRR : 'freshtv94) + +and _menhir_run15 : _menhir_env -> 'ttv_tail -> _menhir_state -> ( +# 24 "annot_parser.mly" + (string) +# 908 "annot_parser.ml" +) -> 'ttv_return = + fun _menhir_env _menhir_stack _menhir_s _v -> + let (_menhir_env : _menhir_env) = _menhir_env in + let (_menhir_stack : 'freshtv71) = Obj.magic _menhir_stack in + let (_menhir_s : _menhir_state) = _menhir_s in + let ((_1 : ( +# 24 "annot_parser.mly" + (string) +# 917 "annot_parser.ml" + )) : ( +# 24 "annot_parser.mly" + (string) +# 921 "annot_parser.ml" + )) = _v in + ((let _v : 'tv_endline = +# 71 "annot_parser.mly" + ( failwith _1 ) +# 926 "annot_parser.ml" + in + _menhir_goto_endline _menhir_env _menhir_stack _menhir_s _v) : 'freshtv72) + +and _menhir_run16 : _menhir_env -> 'ttv_tail -> _menhir_state -> 'ttv_return = + fun _menhir_env _menhir_stack _menhir_s -> + let (_menhir_env : _menhir_env) = _menhir_env in + let (_menhir_stack : 'freshtv69) = Obj.magic _menhir_stack in + let (_menhir_s : _menhir_state) = _menhir_s in + ((let _1 = () in + let _v : 'tv_endline = +# 69 "annot_parser.mly" + ( () ) +# 939 "annot_parser.ml" + in + _menhir_goto_endline _menhir_env _menhir_stack _menhir_s _v) : 'freshtv70) + +and _menhir_run17 : _menhir_env -> 'ttv_tail -> _menhir_state -> 'ttv_return = + fun _menhir_env _menhir_stack _menhir_s -> + let (_menhir_env : _menhir_env) = _menhir_env in + let (_menhir_stack : 'freshtv67) = Obj.magic _menhir_stack in + let (_menhir_s : _menhir_state) = _menhir_s in + ((let _1 = () in + let _v : 'tv_endline = +# 70 "annot_parser.mly" + ( () ) +# 952 "annot_parser.ml" + in + _menhir_goto_endline _menhir_env _menhir_stack _menhir_s _v) : 'freshtv68) and _menhir_discard : _menhir_env -> _menhir_env = fun _menhir_env -> @@ -876,9 +965,9 @@ and _menhir_discard : _menhir_env -> _menhir_env = } and annot : (Lexing.lexbuf -> token) -> Lexing.lexbuf -> ( -# 27 "annot_parser.mly" +# 28 "annot_parser.mly" (Primitive.t) -# 882 "annot_parser.ml" +# 971 "annot_parser.ml" ) = fun lexer lexbuf -> let _menhir_env = @@ -893,29 +982,109 @@ and annot : (Lexing.lexbuf -> token) -> Lexing.lexbuf -> ( }) : _menhir_env) in Obj.magic (let (_menhir_env : _menhir_env) = _menhir_env in - let (_menhir_stack : 'freshtv49) = ((), _menhir_env._menhir_lexbuf.Lexing.lex_curr_p) in + let (_menhir_stack : 'freshtv65) = ((), _menhir_env._menhir_lexbuf.Lexing.lex_curr_p) in ((let _menhir_env = _menhir_discard _menhir_env in let _tok = _menhir_env._menhir_token in match _tok with + | TIf -> + let (_menhir_env : _menhir_env) = _menhir_env in + let (_menhir_stack : 'freshtv15) = Obj.magic _menhir_stack in + ((let _menhir_env = _menhir_discard _menhir_env in + let _tok = _menhir_env._menhir_token in + match _tok with + | TSemi -> + let (_menhir_env : _menhir_env) = _menhir_env in + let (_menhir_stack : 'freshtv11) = Obj.magic _menhir_stack in + ((let _menhir_env = _menhir_discard _menhir_env in + let _tok = _menhir_env._menhir_token in + match _tok with + | TBang -> + let (_menhir_env : _menhir_env) = _menhir_env in + let (_menhir_stack : ('freshtv5)) = Obj.magic _menhir_stack in + ((let _menhir_env = _menhir_discard _menhir_env in + let _tok = _menhir_env._menhir_token in + match _tok with + | TIdent _v -> + let (_menhir_env : _menhir_env) = _menhir_env in + let (_menhir_stack : (('freshtv1))) = Obj.magic _menhir_stack in + let (_v : ( +# 22 "annot_parser.mly" + (string) +# 1014 "annot_parser.ml" + )) = _v in + ((let _menhir_stack = (_menhir_stack, _v) in + let _menhir_env = _menhir_discard _menhir_env in + let _tok = _menhir_env._menhir_token in + match _tok with + | EOF -> + _menhir_run17 _menhir_env (Obj.magic _menhir_stack) MenhirState53 + | EOL -> + _menhir_run16 _menhir_env (Obj.magic _menhir_stack) MenhirState53 + | TOTHER _v -> + _menhir_run15 _menhir_env (Obj.magic _menhir_stack) MenhirState53 _v + | _ -> + assert (not _menhir_env._menhir_error); + _menhir_env._menhir_error <- true; + _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) MenhirState53) : 'freshtv2) + | _ -> + assert (not _menhir_env._menhir_error); + _menhir_env._menhir_error <- true; + let (_menhir_env : _menhir_env) = _menhir_env in + let (_menhir_stack : (('freshtv3))) = Obj.magic _menhir_stack in + (raise _eRR : 'freshtv4)) : 'freshtv6) + | TIdent _v -> + let (_menhir_env : _menhir_env) = _menhir_env in + let (_menhir_stack : ('freshtv7)) = Obj.magic _menhir_stack in + let (_v : ( +# 22 "annot_parser.mly" + (string) +# 1042 "annot_parser.ml" + )) = _v in + ((let _menhir_stack = (_menhir_stack, _v) in + let _menhir_env = _menhir_discard _menhir_env in + let _tok = _menhir_env._menhir_token in + match _tok with + | EOF -> + _menhir_run17 _menhir_env (Obj.magic _menhir_stack) MenhirState50 + | EOL -> + _menhir_run16 _menhir_env (Obj.magic _menhir_stack) MenhirState50 + | TOTHER _v -> + _menhir_run15 _menhir_env (Obj.magic _menhir_stack) MenhirState50 _v + | _ -> + assert (not _menhir_env._menhir_error); + _menhir_env._menhir_error <- true; + _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) MenhirState50) : 'freshtv8) + | _ -> + assert (not _menhir_env._menhir_error); + _menhir_env._menhir_error <- true; + let (_menhir_env : _menhir_env) = _menhir_env in + let (_menhir_stack : ('freshtv9)) = Obj.magic _menhir_stack in + (raise _eRR : 'freshtv10)) : 'freshtv12) + | _ -> + assert (not _menhir_env._menhir_error); + _menhir_env._menhir_error <- true; + let (_menhir_env : _menhir_env) = _menhir_env in + let (_menhir_stack : 'freshtv13) = Obj.magic _menhir_stack in + (raise _eRR : 'freshtv14)) : 'freshtv16) | TProvides -> let (_menhir_env : _menhir_env) = _menhir_env in - let (_menhir_stack : 'freshtv29) = Obj.magic _menhir_stack in + let (_menhir_stack : 'freshtv45) = Obj.magic _menhir_stack in ((let _menhir_env = _menhir_discard _menhir_env in let _tok = _menhir_env._menhir_token in match _tok with | TSemi -> let (_menhir_env : _menhir_env) = _menhir_env in - let (_menhir_stack : 'freshtv25) = Obj.magic _menhir_stack in + let (_menhir_stack : 'freshtv41) = Obj.magic _menhir_stack in ((let _menhir_env = _menhir_discard _menhir_env in let _tok = _menhir_env._menhir_token in match _tok with | TIdent _v -> let (_menhir_env : _menhir_env) = _menhir_env in - let (_menhir_stack : ('freshtv21)) = Obj.magic _menhir_stack in + let (_menhir_stack : ('freshtv37)) = Obj.magic _menhir_stack in let (_v : ( # 22 "annot_parser.mly" (string) -# 919 "annot_parser.ml" +# 1088 "annot_parser.ml" )) = _v in ((let _menhir_stack = (_menhir_stack, _v) in let _menhir_env = _menhir_discard _menhir_env in @@ -923,96 +1092,96 @@ and annot : (Lexing.lexbuf -> token) -> Lexing.lexbuf -> ( match _tok with | TA_Const -> let (_menhir_env : _menhir_env) = _menhir_env in - let (_menhir_stack : 'freshtv3) = Obj.magic _menhir_stack in + let (_menhir_stack : 'freshtv19) = Obj.magic _menhir_stack in ((let _menhir_env = _menhir_discard _menhir_env in let (_menhir_env : _menhir_env) = _menhir_env in - let (_menhir_stack : 'freshtv1) = Obj.magic _menhir_stack in + let (_menhir_stack : 'freshtv17) = Obj.magic _menhir_stack in ((let _1 = () in let _v : 'tv_prim_annot = -# 44 "annot_parser.mly" +# 48 "annot_parser.mly" (`Pure) -# 935 "annot_parser.ml" +# 1104 "annot_parser.ml" in - _menhir_goto_prim_annot _menhir_env _menhir_stack _v) : 'freshtv2)) : 'freshtv4) + _menhir_goto_prim_annot _menhir_env _menhir_stack _v) : 'freshtv18)) : 'freshtv20) | TA_Mutable -> let (_menhir_env : _menhir_env) = _menhir_env in - let (_menhir_stack : 'freshtv7) = Obj.magic _menhir_stack in + let (_menhir_stack : 'freshtv23) = Obj.magic _menhir_stack in ((let _menhir_env = _menhir_discard _menhir_env in let (_menhir_env : _menhir_env) = _menhir_env in - let (_menhir_stack : 'freshtv5) = Obj.magic _menhir_stack in + let (_menhir_stack : 'freshtv21) = Obj.magic _menhir_stack in ((let _1 = () in let _v : 'tv_prim_annot = -# 45 "annot_parser.mly" +# 49 "annot_parser.mly" (`Mutable) -# 948 "annot_parser.ml" +# 1117 "annot_parser.ml" in - _menhir_goto_prim_annot _menhir_env _menhir_stack _v) : 'freshtv6)) : 'freshtv8) + _menhir_goto_prim_annot _menhir_env _menhir_stack _v) : 'freshtv22)) : 'freshtv24) | TA_Mutator -> let (_menhir_env : _menhir_env) = _menhir_env in - let (_menhir_stack : 'freshtv11) = Obj.magic _menhir_stack in + let (_menhir_stack : 'freshtv27) = Obj.magic _menhir_stack in ((let _menhir_env = _menhir_discard _menhir_env in let (_menhir_env : _menhir_env) = _menhir_env in - let (_menhir_stack : 'freshtv9) = Obj.magic _menhir_stack in + let (_menhir_stack : 'freshtv25) = Obj.magic _menhir_stack in ((let _1 = () in let _v : 'tv_prim_annot = -# 46 "annot_parser.mly" +# 50 "annot_parser.mly" (`Mutator) -# 961 "annot_parser.ml" +# 1130 "annot_parser.ml" in - _menhir_goto_prim_annot _menhir_env _menhir_stack _v) : 'freshtv10)) : 'freshtv12) + _menhir_goto_prim_annot _menhir_env _menhir_stack _v) : 'freshtv26)) : 'freshtv28) | TA_Pure -> let (_menhir_env : _menhir_env) = _menhir_env in - let (_menhir_stack : 'freshtv15) = Obj.magic _menhir_stack in + let (_menhir_stack : 'freshtv31) = Obj.magic _menhir_stack in ((let _menhir_env = _menhir_discard _menhir_env in let (_menhir_env : _menhir_env) = _menhir_env in - let (_menhir_stack : 'freshtv13) = Obj.magic _menhir_stack in + let (_menhir_stack : 'freshtv29) = Obj.magic _menhir_stack in ((let _1 = () in let _v : 'tv_prim_annot = -# 43 "annot_parser.mly" +# 47 "annot_parser.mly" (`Pure) -# 974 "annot_parser.ml" +# 1143 "annot_parser.ml" in - _menhir_goto_prim_annot _menhir_env _menhir_stack _v) : 'freshtv14)) : 'freshtv16) + _menhir_goto_prim_annot _menhir_env _menhir_stack _v) : 'freshtv30)) : 'freshtv32) | EOF | EOL | LPARENT | TOTHER _ -> let (_menhir_env : _menhir_env) = _menhir_env in - let (_menhir_stack : 'freshtv17) = Obj.magic _menhir_stack in + let (_menhir_stack : 'freshtv33) = Obj.magic _menhir_stack in ((let _v : 'tv_option_prim_annot_ = # 114 "" ( None ) -# 983 "annot_parser.ml" +# 1152 "annot_parser.ml" in - _menhir_goto_option_prim_annot_ _menhir_env _menhir_stack _v) : 'freshtv18) + _menhir_goto_option_prim_annot_ _menhir_env _menhir_stack _v) : 'freshtv34) | _ -> assert (not _menhir_env._menhir_error); _menhir_env._menhir_error <- true; let (_menhir_env : _menhir_env) = _menhir_env in - let (_menhir_stack : (('freshtv19)) * ( + let (_menhir_stack : (('freshtv35)) * ( # 22 "annot_parser.mly" (string) -# 993 "annot_parser.ml" +# 1162 "annot_parser.ml" )) = Obj.magic _menhir_stack in - (raise _eRR : 'freshtv20)) : 'freshtv22) + (raise _eRR : 'freshtv36)) : 'freshtv38) | _ -> assert (not _menhir_env._menhir_error); _menhir_env._menhir_error <- true; let (_menhir_env : _menhir_env) = _menhir_env in - let (_menhir_stack : ('freshtv23)) = Obj.magic _menhir_stack in - (raise _eRR : 'freshtv24)) : 'freshtv26) + let (_menhir_stack : ('freshtv39)) = Obj.magic _menhir_stack in + (raise _eRR : 'freshtv40)) : 'freshtv42) | _ -> assert (not _menhir_env._menhir_error); _menhir_env._menhir_error <- true; let (_menhir_env : _menhir_env) = _menhir_env in - let (_menhir_stack : 'freshtv27) = Obj.magic _menhir_stack in - (raise _eRR : 'freshtv28)) : 'freshtv30) + let (_menhir_stack : 'freshtv43) = Obj.magic _menhir_stack in + (raise _eRR : 'freshtv44)) : 'freshtv46) | TRequires -> let (_menhir_env : _menhir_env) = _menhir_env in - let (_menhir_stack : 'freshtv35) = Obj.magic _menhir_stack in + let (_menhir_stack : 'freshtv51) = Obj.magic _menhir_stack in ((let _menhir_env = _menhir_discard _menhir_env in let _tok = _menhir_env._menhir_token in match _tok with | TSemi -> let (_menhir_env : _menhir_env) = _menhir_env in - let (_menhir_stack : 'freshtv31) = Obj.magic _menhir_stack in + let (_menhir_stack : 'freshtv47) = Obj.magic _menhir_stack in ((let _menhir_env = _menhir_discard _menhir_env in let _tok = _menhir_env._menhir_token in match _tok with @@ -1021,22 +1190,22 @@ and annot : (Lexing.lexbuf -> token) -> Lexing.lexbuf -> ( | _ -> assert (not _menhir_env._menhir_error); _menhir_env._menhir_error <- true; - _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) MenhirState20) : 'freshtv32) + _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) MenhirState20) : 'freshtv48) | _ -> assert (not _menhir_env._menhir_error); _menhir_env._menhir_error <- true; let (_menhir_env : _menhir_env) = _menhir_env in - let (_menhir_stack : 'freshtv33) = Obj.magic _menhir_stack in - (raise _eRR : 'freshtv34)) : 'freshtv36) + let (_menhir_stack : 'freshtv49) = Obj.magic _menhir_stack in + (raise _eRR : 'freshtv50)) : 'freshtv52) | TVersion -> let (_menhir_env : _menhir_env) = _menhir_env in - let (_menhir_stack : 'freshtv41) = Obj.magic _menhir_stack in + let (_menhir_stack : 'freshtv57) = Obj.magic _menhir_stack in ((let _menhir_env = _menhir_discard _menhir_env in let _tok = _menhir_env._menhir_token in match _tok with | TSemi -> let (_menhir_env : _menhir_env) = _menhir_env in - let (_menhir_stack : 'freshtv37) = Obj.magic _menhir_stack in + let (_menhir_stack : 'freshtv53) = Obj.magic _menhir_stack in ((let _menhir_env = _menhir_discard _menhir_env in let _tok = _menhir_env._menhir_token in match _tok with @@ -1053,37 +1222,37 @@ and annot : (Lexing.lexbuf -> token) -> Lexing.lexbuf -> ( | _ -> assert (not _menhir_env._menhir_error); _menhir_env._menhir_error <- true; - _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) MenhirState3) : 'freshtv38) + _menhir_errorcase _menhir_env (Obj.magic _menhir_stack) MenhirState3) : 'freshtv54) | _ -> assert (not _menhir_env._menhir_error); _menhir_env._menhir_error <- true; let (_menhir_env : _menhir_env) = _menhir_env in - let (_menhir_stack : 'freshtv39) = Obj.magic _menhir_stack in - (raise _eRR : 'freshtv40)) : 'freshtv42) + let (_menhir_stack : 'freshtv55) = Obj.magic _menhir_stack in + (raise _eRR : 'freshtv56)) : 'freshtv58) | TWeakdef -> let (_menhir_env : _menhir_env) = _menhir_env in - let (_menhir_stack : 'freshtv45) = Obj.magic _menhir_stack in + let (_menhir_stack : 'freshtv61) = Obj.magic _menhir_stack in ((let (_menhir_env : _menhir_env) = _menhir_env in - let (_menhir_stack : 'freshtv43) = Obj.magic _menhir_stack in + let (_menhir_stack : 'freshtv59) = Obj.magic _menhir_stack in ((let _1 = () in let _v : ( -# 27 "annot_parser.mly" +# 28 "annot_parser.mly" (Primitive.t) -# 1073 "annot_parser.ml" +# 1242 "annot_parser.ml" ) = -# 40 "annot_parser.mly" +# 41 "annot_parser.mly" ( `Weakdef None ) -# 1077 "annot_parser.ml" +# 1246 "annot_parser.ml" in - _menhir_goto_annot _menhir_env _menhir_stack _v) : 'freshtv44)) : 'freshtv46) + _menhir_goto_annot _menhir_env _menhir_stack _v) : 'freshtv60)) : 'freshtv62) | _ -> assert (not _menhir_env._menhir_error); _menhir_env._menhir_error <- true; let (_menhir_env : _menhir_env) = _menhir_env in - let (_menhir_stack : 'freshtv47) = Obj.magic _menhir_stack in - (raise _eRR : 'freshtv48)) : 'freshtv50)) + let (_menhir_stack : 'freshtv63) = Obj.magic _menhir_stack in + (raise _eRR : 'freshtv64)) : 'freshtv66)) # 269 "" -# 1090 "annot_parser.ml" +# 1259 "annot_parser.ml" diff --git a/compiler/lib/annot_parser.mli b/compiler/lib/annot_parser.mli index b52f9fb135..f5077c2d12 100644 --- a/compiler/lib/annot_parser.mli +++ b/compiler/lib/annot_parser.mli @@ -9,8 +9,10 @@ type token = | TRequires | TProvides | TOTHER of (string) + | TIf | TIdent of (string) | TComma + | TBang | TA_Shallow | TA_Pure | TA_Object_literal diff --git a/compiler/lib/annot_parser.mly b/compiler/lib/annot_parser.mly index 7b6c6ca105..c2eca14f0c 100644 --- a/compiler/lib/annot_parser.mly +++ b/compiler/lib/annot_parser.mly @@ -17,11 +17,12 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *) -%token TProvides TRequires TVersion TWeakdef +%token TProvides TRequires TVersion TWeakdef TIf %token TA_Pure TA_Const TA_Mutable TA_Mutator TA_Shallow TA_Object_literal %token TIdent TVNum %token TComma TSemi EOF EOL LE LT GE GT EQ LPARENT RPARENT %token TOTHER +%token TBang %start annot %type annot @@ -38,7 +39,10 @@ annot: | TVersion TSemi l=separated_nonempty_list(TComma,version) endline { `Version (None,l) } | TWeakdef { `Weakdef None } - + | TIf TSemi name=TIdent endline + { `If (None,name) } + | TIf TSemi TBang name=TIdent endline + { `Ifnot (None,name) } prim_annot: | TA_Pure {`Pure} | TA_Const {`Pure} diff --git a/compiler/lib/config.ml b/compiler/lib/config.ml index 0b68ac4e43..06bb18876b 100644 --- a/compiler/lib/config.ml +++ b/compiler/lib/config.ml @@ -80,7 +80,7 @@ module Flag = struct let safe_string = o ~name:"safestring" ~default:true - let use_js_string = o ~name:"use-js-string" ~default:true + let use_js_string = o ~name:"use-js-string" ~default:false let check_magic = o ~name:"check-magic-number" ~default:true diff --git a/compiler/lib/generate.ml b/compiler/lib/generate.ml index 9ba33cec82..4542e58bc2 100644 --- a/compiler/lib/generate.ml +++ b/compiler/lib/generate.ml @@ -107,7 +107,9 @@ module Share = struct let add_code_string s share = let share = add_string s share in - if Config.Flag.use_js_string () then share else add_prim "caml_new_string" share + if Config.Flag.use_js_string () + then share + else add_prim "caml_string_of_jsbytes" share let add_code_istring s share = add_string s share @@ -124,11 +126,12 @@ module Share = struct | Pc c -> get_constant c t | _ -> t) - let get - ?(alias_strings = false) - ?(alias_prims = false) - ?(alias_apply = true) - { blocks; _ } : t = + let get ?alias_strings ?(alias_prims = false) ?(alias_apply = true) { blocks; _ } : t = + let alias_strings = + match alias_strings with + | None -> Config.Flag.use_js_string () + | Some x -> x + in let count = Addr.Map.fold (fun _ block share -> @@ -176,7 +179,7 @@ module Share = struct then ( try J.EVar (StringMap.find s t.vars.strings) with Not_found -> - let x = Var.fresh_n "str" in + let x = Var.fresh_n (Printf.sprintf "cst_%s" s) in let v = J.V x in t.vars <- { t.vars with strings = StringMap.add s v t.vars.strings }; J.EVar v) @@ -309,17 +312,18 @@ let kind k = | `Mutable -> mutable_p | `Mutator -> mutator_p +let ocaml_string ~ctx ~loc s = + if Config.Flag.use_js_string () + then s + else + let p = Share.get_prim (runtime_fun ctx) "caml_string_of_jsbytes" ctx.Ctx.share in + ecall p [ s ] loc + let rec constant_rec ~ctx x level instrs = match x with | String s -> let e = Share.get_string str_js s ctx.Ctx.share in - let e = - if Config.Flag.use_js_string () - then e - else - let p = Share.get_prim (runtime_fun ctx) "caml_new_string" ctx.Ctx.share in - ecall p [ e ] J.N - in + let e = ocaml_string ~ctx ~loc:J.N e in e, instrs | IString s -> Share.get_string str_js s ctx.Ctx.share, instrs | Float f -> float_const f, instrs @@ -860,11 +864,7 @@ let register_bin_math_prim name prim = let _ = register_un_prim_ctx "%caml_format_int_special" `Pure (fun ctx cx loc -> let s = J.EBin (J.Plus, str_js "", cx) in - if Config.Flag.use_js_string () - then s - else - let p = Share.get_prim (runtime_fun ctx) "caml_new_string" ctx.Ctx.share in - ecall p [ s ] loc); + ocaml_string ~ctx ~loc s); register_bin_prim "caml_array_unsafe_get" `Mutable (fun cx cy _ -> Mlvalue.Array.field cx cy); register_bin_prim "%int_add" `Pure (fun cx cy _ -> to_int (plus_int cx cy)); @@ -919,11 +919,6 @@ let _ = J.EUn (J.Not, J.EUn (J.Not, cx))); register_un_prim "caml_js_to_bool" `Pure (fun cx _ -> to_int cx); - (* register_un_prim "caml_js_from_string" `Mutable (fun cx loc -> - if Config.Flag.use_js_string () - then cx - else - J.ECall (J.EDot (cx, "toString"), [], loc)); *) register_tern_prim "caml_js_set" (fun cx cy cz _ -> J.EBin (J.Eq, J.EAccess (cx, cy), cz)); register_bin_prim "caml_js_get" `Mutable (fun cx cy _ -> J.EAccess (cx, cy)); @@ -935,7 +930,10 @@ let _ = bool (J.EBin (J.InstanceOf, cx, cy))); register_un_prim "caml_js_typeof" `Pure (fun cx _ -> J.EUn (J.Typeof, cx)) +(* This is not correct when switching the js-string flag *) (* {[ + register_un_prim "caml_jsstring_of_string" `Mutable (fun cx loc -> + J.ECall (J.EDot (cx, "toString"), [], loc)); register_bin_prim "caml_string_notequal" `Pure (fun cx cy _ -> J.EBin (J.NotEqEq, cx, cy)); register_bin_prim "caml_string_equal" `Pure (fun cx cy _ -> diff --git a/compiler/lib/linker.ml b/compiler/lib/linker.ml index 66ddb42149..d003fd6343 100644 --- a/compiler/lib/linker.ml +++ b/compiler/lib/linker.ml @@ -28,6 +28,7 @@ type fragment = ; version_constraint : ((int -> int -> bool) * string) list list ; weakdef : bool ; code : Javascript.program + ; ignore : [ `No | `Because of Primitive.condition ] } let loc pi = @@ -45,6 +46,8 @@ let parse_annot loc s = | `Provides (_, n, k, ka) -> Some (`Provides (Some loc, n, k, ka)) | `Version (_, l) -> Some (`Version (Some loc, l)) | `Weakdef _ -> Some (`Weakdef (Some loc)) + | `If (_, name) -> Some (`If (Some loc, name)) + | `Ifnot (_, name) -> Some (`Ifnot (Some loc, name)) with | Not_found -> None | _ -> None @@ -105,6 +108,7 @@ let parse_from_lex ~filename lex = ; version_constraint = [] ; weakdef = false ; code + ; ignore = `No } in List.fold_left annot ~init:fragment ~f:(fun fragment a -> @@ -114,7 +118,31 @@ let parse_from_lex ~filename lex = | `Requires (_, mn) -> { fragment with requires = mn @ fragment.requires } | `Version (_, l) -> { fragment with version_constraint = l :: fragment.version_constraint } - | `Weakdef _ -> { fragment with weakdef = true }) + | `Weakdef _ -> { fragment with weakdef = true } + | `If (_, "js-string") as reason -> + if not (Config.Flag.use_js_string ()) + then { fragment with ignore = `Because reason } + else fragment + | `Ifnot (_, "js-string") as reason -> + if Config.Flag.use_js_string () + then { fragment with ignore = `Because reason } + else fragment + | `If (pi, name) | `Ifnot (pi, name) -> + let loc = + match pi with + | None -> "" + | Some loc -> + Format.sprintf "%d:%d" loc.Parse_info.line loc.Parse_info.col + in + let filename = + match pi with + | Some { Parse_info.src = Some x; _ } + | Some { Parse_info.name = Some x; _ } -> + x + | _ -> "??" + in + Format.eprintf "Unkown flag %S in %s %s\n" name filename loc; + fragment) with Parse_js.Parsing_error pi -> let name = match pi with @@ -288,46 +316,51 @@ let find_named_value code = ignore (p#program code); !all -let load_fragment ~filename { provides; requires; version_constraint; weakdef; code } = - let vmatch = - match version_constraint with - | [] -> true - | l -> List.exists l ~f:version_match - in - if vmatch - then ( - incr last_code_id; - let id = !last_code_id in - match provides with - | None -> always_included := { filename; program = code } :: !always_included - | Some (pi, name, kind, ka) -> - let code = Macro.f code in - let module J = Javascript in - let rec find = function - | [] -> None - | (J.Function_declaration (J.S { J.name = n; _ }, l, _, _), _) :: _ - when String.equal name n -> - Some (List.length l) - | _ :: rem -> find rem - in - let arity = find code in - let named_values = find_named_value code in - Primitive.register name kind ka arity; - StringSet.iter Primitive.register_named_value named_values; - (if Hashtbl.mem provided name - then - let _, ploc, weakdef = Hashtbl.find provided name in - if not weakdef - then - warn - "warning: overriding primitive %S\n old: %s\n new: %s@." - name - (loc ploc) - (loc pi)); - Hashtbl.add provided name (id, pi, weakdef); - Hashtbl.add provided_rev id (name, pi); - check_primitive ~name pi ~code ~requires; - Hashtbl.add code_pieces id (code, requires)) +let load_fragment + ~filename + { provides; requires; version_constraint; weakdef; code; ignore } = + match ignore with + | `Because _ -> () + | `No -> + let vmatch = + match version_constraint with + | [] -> true + | l -> List.exists l ~f:version_match + in + if vmatch + then ( + incr last_code_id; + let id = !last_code_id in + match provides with + | None -> always_included := { filename; program = code } :: !always_included + | Some (pi, name, kind, ka) -> + let code = Macro.f code in + let module J = Javascript in + let rec find = function + | [] -> None + | (J.Function_declaration (J.S { J.name = n; _ }, l, _, _), _) :: _ + when String.equal name n -> + Some (List.length l) + | _ :: rem -> find rem + in + let arity = find code in + let named_values = find_named_value code in + Primitive.register name kind ka arity; + StringSet.iter Primitive.register_named_value named_values; + (if Hashtbl.mem provided name + then + let _, ploc, weakdef = Hashtbl.find provided name in + if not weakdef + then + warn + "warning: overriding primitive %S\n old: %s\n new: %s@." + name + (loc ploc) + (loc pi)); + Hashtbl.add provided name (id, pi, weakdef); + Hashtbl.add provided_rev id (name, pi); + check_primitive ~name pi ~code ~requires; + Hashtbl.add code_pieces id (code, requires)) let add_file filename = List.iter (parse_file filename) ~f:(load_fragment ~filename) diff --git a/compiler/lib/linker.mli b/compiler/lib/linker.mli index 2f46d8bd19..f22e5f30ae 100644 --- a/compiler/lib/linker.mli +++ b/compiler/lib/linker.mli @@ -28,6 +28,7 @@ type fragment = ; version_constraint : ((int -> int -> bool) * string) list list ; weakdef : bool ; code : Javascript.program + ; ignore : [ `No | `Because of Primitive.condition ] } val parse_file : string -> fragment list diff --git a/compiler/lib/parse_bytecode.ml b/compiler/lib/parse_bytecode.ml index 3416b6ab64..c107dcde09 100644 --- a/compiler/lib/parse_bytecode.ml +++ b/compiler/lib/parse_bytecode.ml @@ -2518,7 +2518,11 @@ let predefined_exceptions () = let v_name_js = Var.fresh () in let v_index = Var.fresh () in [ Let (v_name, Constant (String name)) - ; Let (v_name_js, Constant (IString name)) + ; Let + ( v_name_js + , if Config.Flag.use_js_string () + then Constant (IString name) + else Prim (Extern "caml_jsstring_of_string", [ Pc (IString name) ]) ) ; Let (v_index, Constant (Int (Int32.of_int (-index)))) ; Let (exn, Block (248, [| v_name; v_index |], NotArray)) ; Let diff --git a/compiler/lib/primitive.ml b/compiler/lib/primitive.ml index 49c581b9d3..e3921f1e97 100644 --- a/compiler/lib/primitive.ml +++ b/compiler/lib/primitive.ml @@ -38,11 +38,17 @@ type kind_arg = | `Mutable ] +type condition = + [ `If of Parse_info.t option * string + | `Ifnot of Parse_info.t option * string + ] + type t = [ `Requires of Parse_info.t option * string list | `Provides of Parse_info.t option * string * kind * kind_arg list option | `Version of Parse_info.t option * ((int -> int -> bool) * string) list | `Weakdef of Parse_info.t option + | condition ] let kinds = Hashtbl.create 37 diff --git a/compiler/lib/primitive.mli b/compiler/lib/primitive.mli index 4f34d4538d..fc5b663707 100644 --- a/compiler/lib/primitive.mli +++ b/compiler/lib/primitive.mli @@ -36,11 +36,17 @@ type kind_arg = | `Mutable ] +type condition = + [ `If of Parse_info.t option * string + | `Ifnot of Parse_info.t option * string + ] + type t = [ `Requires of Parse_info.t option * string list | `Provides of Parse_info.t option * string * kind * kind_arg list option | `Version of Parse_info.t option * ((int -> int -> bool) * string) list | `Weakdef of Parse_info.t option + | condition ] val kind : string -> kind diff --git a/compiler/lib/specialize_js.ml b/compiler/lib/specialize_js.ml index de8834bb7b..d133c7e6e1 100644 --- a/compiler/lib/specialize_js.ml +++ b/compiler/lib/specialize_js.ml @@ -125,7 +125,7 @@ let specialize_instr info i rem = | Some s -> Let (x, Prim (Extern "caml_js_delete", [ o; Pc (String s) ])) | _ -> i) :: rem - | Let (x, Prim (Extern "caml_js_from_string", [ y ])) -> + | Let (x, Prim (Extern ("caml_jsstring_of_string" | "caml_js_from_string"), [ y ])) -> (match the_string_of info y with | Some s when String.is_ascii s -> Let (x, Constant (IString s)) | _ -> i) diff --git a/compiler/lib/var_printer.ml b/compiler/lib/var_printer.ml index 2c1d5d4cdd..bb5a6266cf 100644 --- a/compiler/lib/var_printer.ml +++ b/compiler/lib/var_printer.ml @@ -102,6 +102,11 @@ let name t v nm_orig = | "", _ -> "symbol" | str, _ -> str in + (* protect against large names *) + let max_len = 20 in + let str = + if String.length str > max_len then String.sub str ~pos:0 ~len:max_len else str + in name_raw t v str) let get_name t v = try Some (Hashtbl.find t.names v) with Not_found -> None diff --git a/compiler/tests-compiler/obj_dup.ml b/compiler/tests-compiler/obj_dup.ml index f2a63f1791..f9b91fd70d 100644 --- a/compiler/tests-compiler/obj_dup.ml +++ b/compiler/tests-compiler/obj_dup.ml @@ -23,6 +23,7 @@ let%expect_test _ = Util.compile_and_run + ~flags:[ "--enable"; "use-js-string" ] {| let print_bool b = print_endline (string_of_bool b) let () = @@ -47,6 +48,33 @@ let%expect_test _ = true |}] +let%expect_test _ = + Util.compile_and_run + ~flags:[ "--disable"; "use-js-string" ] + {| + let print_bool b = print_endline (string_of_bool b) + let () = + let s = "Hello" in + let s' : string = Obj.obj (Obj.dup (Obj.repr s)) in + print_bool (s = s'); + print_bool (s != s') + + let () = + let s = Bytes.of_string "Hello" in + let s' : bytes = Obj.obj (Obj.dup (Obj.repr s)) in + print_bool (s = s'); + print_bool (s != s'); + Bytes.set s' 1 'a'; + print_bool (s <> s') + |}; + [%expect {| + true + true + true + true + true + |}] + let%expect_test _ = Util.compile_and_run {| diff --git a/compiler/tests-compiler/static_eval.ml b/compiler/tests-compiler/static_eval.ml index 7e639ce54f..dda40b00d3 100644 --- a/compiler/tests-compiler/static_eval.ml +++ b/compiler/tests-compiler/static_eval.ml @@ -22,6 +22,7 @@ open Util let%expect_test "static eval of string get" = let program = compile_and_parse + ~flags:[ "--enable"; "use-js-string" ] {| let lr = ref [] let black_box v = lr := (Obj.repr v) :: !lr @@ -43,6 +44,35 @@ let%expect_test "static eval of string get" = print_var_decl program "bx"; [%expect {| - var ex = call_with_char(caml_string_get("abcdefghijklmnopqrstuvwxyz",- 10)); + var ex = call_with_char(caml_string_get(cst_abcdefghijklmnop,- 10)); var ax = call_with_char(103); - var bx = call_with_char(caml_string_get("abcdefghijklmnopqrstuvwxyz",30)); |}] + var bx = call_with_char(caml_string_get(cst_abcdefghijklmnop,30)); |}] + +let%expect_test "static eval of string get" = + let program = + compile_and_parse + ~flags:[ "--disable"; "use-js-string" ] + {| + let lr = ref [] + let black_box v = lr := (Obj.repr v) :: !lr + + let constant = "abcdefghijklmnopqrstuvwxyz" + + let call_with_char c = black_box c + + let ex = call_with_char constant.[-10] ;; + black_box ex + let ax = call_with_char constant.[6] ;; + black_box ax + let bx = call_with_char constant.[30] ;; + black_box bx ;; + |} + in + print_var_decl program "ex"; + print_var_decl program "ax"; + print_var_decl program "bx"; + [%expect + {| + var ex = call_with_char(caml_string_get(constant,- 10)); + var ax = call_with_char(103); + var bx = call_with_char(caml_string_get(constant,30)); |}] diff --git a/compiler/tests-compiler/variable_declaration_output.ml b/compiler/tests-compiler/variable_declaration_output.ml index 61766d5936..9c626d5e8a 100644 --- a/compiler/tests-compiler/variable_declaration_output.ml +++ b/compiler/tests-compiler/variable_declaration_output.ml @@ -22,6 +22,7 @@ open Util let%expect_test _ = let program = compile_and_parse + ~flags:[ "--enable"; "use-js-string" ] {| type r = {x: int; y: string} let ex = {x = 5; y = "hello"} ;; @@ -47,6 +48,35 @@ let%expect_test _ = var cx = [254,NaN,NaN,Infinity,- Infinity,0.,- 0.]; var symbol_op = [0,symbol_bind,symbol_map,symbol]; |}] +let%expect_test _ = + let program = + compile_and_parse + ~flags:[ "--disable"; "use-js-string" ] + {| + type r = {x: int; y: string} + let ex = {x = 5; y = "hello"} ;; + let ax = [|1;2;3;4|] ;; + let bx = [|1.0;2.0;3.0;4.0|] ;; + let cx = [|0./.0.;-0./.0.;1./.0.;-1./.0.;0.;-0.|] ;; + let (>>=) a b = a * b + let (>>|) a b = a + b + let (>>?=) a b = a / b + let symbol_op = (>>=), (>>|), (>>?=);; + |} + in + print_var_decl program "ex"; + print_var_decl program "ax"; + print_var_decl program "bx"; + print_var_decl program "cx"; + print_var_decl program "symbol_op"; + [%expect + {| + var ex = [0,5,runtime.caml_string_of_jsbytes("hello")]; + var ax = [0,1,2,3,4]; + var bx = [254,1.,2.,3.,4.]; + var cx = [254,NaN,NaN,Infinity,- Infinity,0.,- 0.]; + var symbol_op = [0,symbol_bind,symbol_map,symbol]; |}] + let%expect_test _ = let compile ~enable s = let enable_disable = if enable then "--enable" else "--disable" in diff --git a/lib/js_of_ocaml/js.ml b/lib/js_of_ocaml/js.ml index 3fc2b5309a..6ce8bcff3f 100644 --- a/lib/js_of_ocaml/js.ml +++ b/lib/js_of_ocaml/js.ml @@ -699,9 +699,9 @@ external bool : bool -> bool t = "caml_js_from_bool" external to_bool : bool t -> bool = "caml_js_to_bool" -external string : string -> js_string t = "caml_js_from_string" +external string : string -> js_string t = "caml_jsstring_of_string" -external to_string : js_string t -> string = "caml_js_to_string" +external to_string : js_string t -> string = "caml_string_of_jsstring" external array : 'a array -> 'a js_array t = "caml_js_from_array" @@ -709,7 +709,7 @@ external to_array : 'a js_array t -> 'a array = "caml_js_to_array" external bytestring : string -> js_string t = "caml_jsbytes_of_string" -external to_bytestring : js_string t -> string = "caml_js_to_byte_string" +external to_bytestring : js_string t -> string = "caml_string_of_jsbytes" external typeof : _ t -> js_string t = "caml_js_typeof" diff --git a/lib/js_of_ocaml/js.mli b/lib/js_of_ocaml/js.mli index cc7c710b9d..d7292c6b61 100644 --- a/lib/js_of_ocaml/js.mli +++ b/lib/js_of_ocaml/js.mli @@ -743,12 +743,12 @@ external bool : bool -> bool t = "caml_js_from_bool" external to_bool : bool t -> bool = "caml_js_to_bool" (** Conversion of booleans from Javascript to OCaml. *) -external string : string -> js_string t = "caml_js_from_string" +external string : string -> js_string t = "caml_jsstring_of_string" (** Conversion of strings from OCaml to Javascript. (The OCaml string is considered to be encoded in UTF-8 and is converted to UTF-16.) *) -external to_string : js_string t -> string = "caml_js_to_string" +external to_string : js_string t -> string = "caml_string_of_jsstring" (** Conversion of strings from Javascript to OCaml. *) external array : 'a array -> 'a js_array t = "caml_js_from_array" @@ -761,7 +761,7 @@ external bytestring : string -> js_string t = "caml_jsbytes_of_string" (** Conversion of strings of bytes from OCaml to Javascript. (Each byte will be converted in an UTF-16 code point.) *) -external to_bytestring : js_string t -> string = "caml_js_to_byte_string" +external to_bytestring : js_string t -> string = "caml_string_of_jsbytes" (** Conversion of strings of bytes from Javascript to OCaml. (The Javascript string should only contain UTF-16 code points below 255.) *) diff --git a/lib/js_of_ocaml/js_of_ocaml_stubs.c b/lib/js_of_ocaml/js_of_ocaml_stubs.c index a38ba43f57..60fc344d98 100644 --- a/lib/js_of_ocaml/js_of_ocaml_stubs.c +++ b/lib/js_of_ocaml/js_of_ocaml_stubs.c @@ -72,10 +72,6 @@ void caml_js_from_float () { fprintf(stderr, "Unimplemented Javascript primitive caml_js_from_float!\n"); exit(1); } -void caml_js_from_string () { - fprintf(stderr, "Unimplemented Javascript primitive caml_js_from_string!\n"); - exit(1); -} void caml_js_fun_call () { fprintf(stderr, "Unimplemented Javascript primitive caml_js_fun_call!\n"); exit(1); @@ -132,18 +128,10 @@ void caml_js_to_bool () { fprintf(stderr, "Unimplemented Javascript primitive caml_js_to_bool!\n"); exit(1); } -void caml_js_to_byte_string () { - fprintf(stderr, "Unimplemented Javascript primitive caml_js_to_byte_string!\n"); - exit(1); -} void caml_js_to_float () { fprintf(stderr, "Unimplemented Javascript primitive caml_js_to_float!\n"); exit(1); } -void caml_js_to_string () { - fprintf(stderr, "Unimplemented Javascript primitive caml_js_to_string!\n"); - exit(1); -} void caml_js_typeof () { fprintf(stderr, "Unimplemented Javascript primitive caml_js_typeof!\n"); exit(1); @@ -184,6 +172,10 @@ void caml_jsbytes_of_string () { fprintf(stderr, "Unimplemented Javascript primitive caml_jsbytes_of_string!\n"); exit(1); } +void caml_jsstring_of_string () { + fprintf(stderr, "Unimplemented Javascript primitive caml_jsstring_of_string!\n"); + exit(1); +} void caml_list_mount_point () { fprintf(stderr, "Unimplemented Javascript primitive caml_list_mount_point!\n"); exit(1); @@ -216,6 +208,14 @@ void caml_string_of_array () { fprintf(stderr, "Unimplemented Javascript primitive caml_string_of_array!\n"); exit(1); } +void caml_string_of_jsbytes () { + fprintf(stderr, "Unimplemented Javascript primitive caml_string_of_jsbytes!\n"); + exit(1); +} +void caml_string_of_jsstring () { + fprintf(stderr, "Unimplemented Javascript primitive caml_string_of_jsstring!\n"); + exit(1); +} void caml_unmount () { fprintf(stderr, "Unimplemented Javascript primitive caml_unmount!\n"); exit(1); diff --git a/lib/js_of_ocaml/json.ml b/lib/js_of_ocaml/json.ml index 5e2098728e..f3322fbebe 100644 --- a/lib/js_of_ocaml/json.ml +++ b/lib/js_of_ocaml/json.ml @@ -36,19 +36,19 @@ class type json = let json : json Js.t = Unsafe.global##._JSON -external to_byte_MlBytes : js_string t -> string = "caml_js_to_byte_string" +external unsafe_equals : 'a -> 'b -> bool = "caml_js_equals" + +external of_jsbytes : js_string t -> string = "caml_string_of_jsbytes" -external to_byte_jsstring : 'a t -> js_string t = "caml_jsbytes_of_string" +external to_jsbytes : 'a t -> js_string t = "caml_jsbytes_of_string" external create_int64_lo_mi_hi : int -> int -> int -> Int64.t = "caml_int64_create_lo_mi_hi" -external unsafe_equals : 'a -> 'b -> bool = "caml_js_equals" - let input_reviver = let reviver _this _key (value : Unsafe.any) : Obj.t = if unsafe_equals (typeof value) (typeof (string "foo")) - then Obj.repr (to_byte_MlBytes (Unsafe.coerce value)) + then Obj.repr (of_jsbytes (Unsafe.coerce value)) else if instanceof value Js.array_empty && (Unsafe.coerce value)##.length == 4 && Unsafe.get value 0 == 255 @@ -81,7 +81,7 @@ let mlInt64_constr = let output_reviver _key (value : Unsafe.any) : Obj.t = if instanceof value mlString_constr - then Obj.repr (to_byte_jsstring (Unsafe.coerce value)) + then Obj.repr (to_jsbytes (Unsafe.coerce value)) else if instanceof value mlInt64_constr then let value = Unsafe.coerce value in diff --git a/runtime/dune b/runtime/dune index 644020a643..4083b1e383 100644 --- a/runtime/dune +++ b/runtime/dune @@ -23,7 +23,7 @@ %{dep:lexing.js} %{dep:marshal.js} %{dep:md5.js} - %{dep:mlString.js} + %{dep:mlBytes.js} %{dep:nat.js} %{dep:parsing.js} %{dep:stdlib.js} @@ -60,7 +60,7 @@ lexing.js marshal.js md5.js - mlString.js + mlBytes.js nat.js parsing.js runtime.js diff --git a/runtime/fs.js b/runtime/fs.js index b54f10d6e8..954dda00b1 100644 --- a/runtime/fs.js +++ b/runtime/fs.js @@ -65,12 +65,12 @@ if (fs_node_supported()) { jsoo_mount_point.push({path:caml_root+"static/", device:new MlFakeDevice(caml_root+"static/")}); //Provides:caml_list_mount_point -//Requires: jsoo_mount_point, caml_new_string +//Requires: jsoo_mount_point, caml_string_of_jsbytes function caml_list_mount_point(){ var prev = 0 for(var i = 0; i < jsoo_mount_point.length; i++){ var old = prev; - prev = [0, caml_new_string(jsoo_mount_point[i].path), old] + prev = [0, caml_string_of_jsbytes(jsoo_mount_point[i].path), old] } return prev; } @@ -113,9 +113,9 @@ function caml_unmount(name){ } //Provides: caml_sys_getcwd -//Requires: caml_current_dir, caml_new_string +//Requires: caml_current_dir, caml_string_of_jsbytes function caml_sys_getcwd() { - return caml_new_string(caml_current_dir); + return caml_string_of_jsbytes(caml_current_dir); } //Provides: caml_sys_chdir @@ -154,7 +154,7 @@ function caml_sys_file_exists (name) { } //Provides: caml_sys_read_directory -//Requires: caml_new_string +//Requires: caml_string_of_jsbytes //Requires: caml_raise_not_a_dir, resolve_fs_device function caml_sys_read_directory(name){ var root = resolve_fs_device(name); @@ -162,7 +162,7 @@ function caml_sys_read_directory(name){ var l = new Array(a.length + 1); l[0] = 0; for(var i=0;ip from ISO C99. //https://github.com/dankogai/js-hexfloat/blob/master/hexfloat.js //Provides: caml_hexstring_of_float const -//Requires: caml_js_to_string, caml_str_repeat +//Requires: caml_string_of_jsstring, caml_str_repeat function caml_hexstring_of_float (x, prec, style) { if (!isFinite(x)) { - if (isNaN(x)) return caml_js_to_string("nan"); - return caml_js_to_string ((x > 0)?"infinity":"-infinity"); + if (isNaN(x)) return caml_string_of_jsstring("nan"); + return caml_string_of_jsstring ((x > 0)?"infinity":"-infinity"); } var sign = (x==0 && 1/x == -Infinity)?1:(x>=0)?0:1; if(sign) x = -x; @@ -121,7 +121,7 @@ function caml_hexstring_of_float (x, prec, style) { x_str = x_str.substr(0,size); } } - return caml_js_to_string (sign_str + '0x' + x_str + 'p' + exp_sign + exp.toString(10)); + return caml_string_of_jsstring (sign_str + '0x' + x_str + 'p' + exp_sign + exp.toString(10)); } //Provides: caml_int64_float_of_bits const diff --git a/runtime/io.js b/runtime/io.js index 2319d9eb3f..6deee4a406 100644 --- a/runtime/io.js +++ b/runtime/io.js @@ -27,10 +27,10 @@ function caml_sys_close(fd) { } //Provides: caml_std_output -//Requires: caml_new_string, caml_ml_string_length, caml_ml_channels +//Requires: caml_string_of_jsbytes, caml_ml_string_length, caml_ml_channels function caml_std_output(chanid,s){ var chan = caml_ml_channels[chanid]; - var str = caml_new_string(s); + var str = caml_string_of_jsbytes(s); var slen = caml_ml_string_length(str); chan.file.write(chan.offset, str, 0, slen); chan.offset += slen; @@ -347,6 +347,7 @@ function caml_ml_flush (chanid) { //Provides: caml_ml_output_bytes //Requires: caml_ml_flush,caml_ml_bytes_length //Requires: caml_create_bytes, caml_blit_bytes, caml_raise_sys_error, caml_ml_channels, caml_string_of_bytes +//Requires: caml_jsbytes_of_string function caml_ml_output_bytes(chanid,buffer,offset,len) { var chan = caml_ml_channels[chanid]; if(! chan.opened) caml_raise_sys_error("Cannot output to a closed channel"); @@ -357,7 +358,8 @@ function caml_ml_output_bytes(chanid,buffer,offset,len) { bytes = caml_create_bytes(len); caml_blit_bytes(buffer,offset,bytes,0,len); } - var jsstring = caml_string_of_bytes(bytes); + var string = caml_string_of_bytes(bytes); + var jsstring = caml_jsbytes_of_string(string); var id = jsstring.lastIndexOf("\n"); if(id < 0) chan.buffer+=jsstring; @@ -377,9 +379,9 @@ function caml_ml_output(chanid,buffer,offset,len){ //Provides: caml_ml_output_char //Requires: caml_ml_output -//Requires: caml_new_string +//Requires: caml_string_of_jsbytes function caml_ml_output_char (chanid,c) { - var s = caml_new_string(String.fromCharCode(c)); + var s = caml_string_of_jsbytes(String.fromCharCode(c)); caml_ml_output(chanid,s,0,1); return 0; } diff --git a/runtime/jslib_js_of_ocaml.js b/runtime/jslib_js_of_ocaml.js index 8e218da609..6773a6aa0b 100644 --- a/runtime/jslib_js_of_ocaml.js +++ b/runtime/jslib_js_of_ocaml.js @@ -27,11 +27,7 @@ function caml_js_to_bool(x) { return +x; } function caml_js_from_float(x) { return x; } //Provides: caml_js_to_float const (const) function caml_js_to_float(x) { return x; } -//Provides: caml_js_from_string mutable (const) -//Requires: caml_is_ascii, caml_utf16_of_utf8 -function caml_js_from_string(s) { - if(caml_is_ascii(s)) return s; - return caml_utf16_of_utf8(s); } + //Provides: caml_js_from_array mutable (shallow) //Requires: raw_array_sub function caml_js_from_array(a) { return raw_array_sub(a,1,a.length-1); } @@ -39,11 +35,6 @@ function caml_js_from_array(a) { return raw_array_sub(a,1,a.length-1); } //Requires: raw_array_cons function caml_js_to_array(a) { return raw_array_cons(a,0); } -//Provides: caml_js_to_byte_string const -function caml_js_to_byte_string(x) { return x } - -//Provides: caml_jsbytes_of_string const -function caml_jsbytes_of_string(x) { return x } //Provides: caml_js_var mutable (const) //Requires: js_print_stderr diff --git a/runtime/lexing.js b/runtime/lexing.js index 943b3a7f7f..b8841c5ecc 100644 --- a/runtime/lexing.js +++ b/runtime/lexing.js @@ -16,7 +16,9 @@ /* The table-driven automaton for lexers generated by camllex. */ //Provides: caml_lex_array +//Requires: caml_jsbytes_of_string function caml_lex_array(s) { + s = caml_jsbytes_of_string(s); var l = s.length / 2; var a = new Array(l); for (var i = 0; i < l; i++) @@ -108,7 +110,7 @@ function caml_lex_engine(tbl, start_state, lexbuf) { //Provides: caml_new_lex_engine //Requires: caml_failwith, caml_lex_array -//Requires: caml_array_of_bytes +//Requires: caml_jsbytes_of_string, caml_array_of_bytes function caml_lex_run_mem(s, i, mem, curr_pos) { for (;;) { var dst = s.charCodeAt(i); i++; @@ -168,7 +170,7 @@ function caml_new_lex_engine(tbl, start_state, lexbuf) { tbl.lex_trans_code = caml_lex_array (tbl[lex_trans_code]); tbl.lex_default_code = caml_lex_array (tbl[lex_default_code]); } - if (tbl.lex_code == null) tbl.lex_code = tbl[lex_code]; + if (tbl.lex_code == null) tbl.lex_code = caml_jsbytes_of_string(tbl[lex_code]); var c, state = start_state; diff --git a/runtime/marshal.js b/runtime/marshal.js index a2ddbaf1f2..c8334f048f 100644 --- a/runtime/marshal.js +++ b/runtime/marshal.js @@ -48,7 +48,8 @@ var caml_marshal_constants = { //Provides: MlStringReader -function MlStringReader (s, i) { this.s = s; this.i = i; } +//Requires: caml_string_of_jsbytes, caml_jsbytes_of_string +function MlStringReader (s, i) { this.s = caml_jsbytes_of_string(s); this.i = i; } MlStringReader.prototype = { read8u:function () { return this.s.charCodeAt(this.i++); }, read8s:function () { return this.s.charCodeAt(this.i++) << 24 >> 24; }, @@ -77,7 +78,7 @@ MlStringReader.prototype = { readstr:function (len) { var i = this.i; this.i = i + len; - return this.s.substring(i, i + len); + return caml_string_of_jsbytes(this.s.substring(i, i + len)); } } diff --git a/runtime/md5.js b/runtime/md5.js index f2f3449a7c..6c52f6d553 100644 --- a/runtime/md5.js +++ b/runtime/md5.js @@ -32,8 +32,14 @@ function caml_md5_chan(chanid,len){ } //Provides: caml_md5_string +//Requires: caml_bytes_of_string, caml_md5_bytes +function caml_md5_string(s, ofs, len) { + return caml_md5_bytes(caml_bytes_of_string(s),ofs,len); +} + +//Provides: caml_md5_bytes //Requires: caml_string_of_array, caml_convert_string_to_bytes -var caml_md5_string = function () { +var caml_md5_bytes = function () { function add (x, y) { return (x + y) | 0; } function xx(q,a,b,x,s,t) { a = add(add(a, q), add(x, t)); @@ -146,14 +152,27 @@ var caml_md5_string = function () { // FIX: maybe we should perform the computation by chunk of 64 bytes // as in http://www.myersdaily.org/joseph/javascript/md5.js var buf = []; - var b = s; - for (var i = 0; i < len; i+=4) { - var j = i + ofs; - buf[i>>2] = - b.charCodeAt(j) | (b.charCodeAt(j+1) << 8) | - (b.charCodeAt(j+2) << 16) | (b.charCodeAt(j+3) << 24); + switch (s.t & 6) { + default: + caml_convert_string_to_bytes(s); + case 0: /* BYTES */ + var b = s.c; + for (var i = 0; i < len; i+=4) { + var j = i + ofs; + buf[i>>2] = + b.charCodeAt(j) | (b.charCodeAt(j+1) << 8) | + (b.charCodeAt(j+2) << 16) | (b.charCodeAt(j+3) << 24); + } + for (; i < len; i++) buf[i>>2] |= b.charCodeAt(i + ofs) << (8 * (i & 3)); + break; + case 4: /* ARRAY */ + var a = s.c; + for (var i = 0; i < len; i+=4) { + var j = i + ofs; + buf[i>>2] = a[j] | (a[j+1] << 8) | (a[j+2] << 16) | (a[j+3] << 24); + } + for (; i < len; i++) buf[i>>2] |= a[i + ofs] << (8 * (i & 3)); } - for (; i < len; i++) buf[i>>2] |= b.charCodeAt(i + ofs) << (8 * (i & 3)); return caml_string_of_array(md5(buf, len)); } } (); diff --git a/runtime/mlString.js b/runtime/mlBytes.js similarity index 71% rename from runtime/mlString.js rename to runtime/mlBytes.js index 5034450578..9e6e675aea 100644 --- a/runtime/mlString.js +++ b/runtime/mlBytes.js @@ -65,13 +65,13 @@ function caml_str_repeat(n, s) { } } -//Provides: caml_subarray_to_string +//Provides: caml_subarray_to_jsbytes //Requires: raw_array_sub //Weakdef // Pre ECMAScript 5, [apply] would not support array-like object. // In such setup, Typed_array would be implemented as polyfill, and [f.apply] would // fail here. Mark the primitive as Weakdef, so that people can override it easily. -function caml_subarray_to_string (a, i, len) { +function caml_subarray_to_jsbytes (a, i, len) { var f = String.fromCharCode; if (i == 0 && len <= 4096 && len == a.length) return f.apply (null, a); var s = ""; @@ -173,11 +173,6 @@ function caml_is_ascii (s) { return !/[^\x00-\x7f]/.test(s); } -//Provides: caml_string_unsafe_get const -function caml_string_unsafe_get (s, i) { - return s.charCodeAt(i); -} - //Provides: caml_bytes_unsafe_get mutable function caml_bytes_unsafe_get (s, i) { switch (s.t & 6) { @@ -207,38 +202,40 @@ function caml_bytes_unsafe_set (s, i, c) { return 0; } -//Provides: caml_string_unsafe_set -//Requires: caml_failwith -function caml_string_unsafe_set (s, i, c) { - caml_failwith("caml_string_unsafe_set"); -} - //Provides: caml_string_bound_error //Requires: caml_invalid_argument function caml_string_bound_error () { caml_invalid_argument ("index out of bounds"); } +//Provides: caml_bytes_bound_error +//Requires: caml_invalid_argument +function caml_bytes_bound_error () { + caml_invalid_argument ("index out of bounds"); +} + //Provides: caml_string_get //Requires: caml_string_bound_error, caml_string_unsafe_get +//Requires: caml_ml_string_length function caml_string_get (s, i) { - if (i >>> 0 >= s.length) caml_string_bound_error(); + if (i >>> 0 >= caml_ml_string_length(s)) caml_string_bound_error(); return caml_string_unsafe_get (s, i); } //Provides: caml_string_get16 //Requires: caml_string_unsafe_get, caml_string_bound_error +//Requires: caml_ml_string_length function caml_string_get16(s,i) { - if (i >>> 0 >= s.length - 1) caml_string_bound_error(); + if (i >>> 0 >= caml_ml_string_length(s) - 1) caml_string_bound_error(); var b1 = caml_string_unsafe_get (s, i), b2 = caml_string_unsafe_get (s, i + 1); return (b2 << 8 | b1); } //Provides: caml_bytes_get16 -//Requires: caml_bytes_unsafe_get, caml_string_bound_error +//Requires: caml_bytes_unsafe_get, caml_bytes_bound_error function caml_bytes_get16(s,i) { - if (i >>> 0 >= s.l - 1) caml_string_bound_error(); + if (i >>> 0 >= s.l - 1) caml_bytes_bound_error(); var b1 = caml_bytes_unsafe_get (s, i), b2 = caml_bytes_unsafe_get (s, i + 1); return (b2 << 8 | b1); @@ -246,8 +243,9 @@ function caml_bytes_get16(s,i) { //Provides: caml_string_get32 //Requires: caml_string_unsafe_get, caml_string_bound_error +//Requires: caml_ml_string_length function caml_string_get32(s,i) { - if (i >>> 0 >= s.length - 3) caml_string_bound_error(); + if (i >>> 0 >= caml_ml_string_length(s) - 3) caml_string_bound_error(); var b1 = caml_string_unsafe_get (s, i), b2 = caml_string_unsafe_get (s, i + 1), b3 = caml_string_unsafe_get (s, i + 2), @@ -256,9 +254,9 @@ function caml_string_get32(s,i) { } //Provides: caml_bytes_get32 -//Requires: caml_bytes_unsafe_get, caml_string_bound_error +//Requires: caml_bytes_unsafe_get, caml_bytes_bound_error function caml_bytes_get32(s,i) { - if (i >>> 0 >= s.l - 3) caml_string_bound_error(); + if (i >>> 0 >= s.l - 3) caml_bytes_bound_error(); var b1 = caml_bytes_unsafe_get (s, i), b2 = caml_bytes_unsafe_get (s, i + 1), b3 = caml_bytes_unsafe_get (s, i + 2), @@ -269,8 +267,9 @@ function caml_bytes_get32(s,i) { //Provides: caml_string_get64 //Requires: caml_string_unsafe_get, caml_string_bound_error //Requires: caml_int64_of_bytes +//Requires: caml_ml_string_length function caml_string_get64(s,i) { - if (i >>> 0 >= s.length - 7) caml_string_bound_error(); + if (i >>> 0 >= caml_ml_string_length(s) - 7) caml_string_bound_error(); var a = new Array(8); for(var j = 0; j < 8; j++){ a[7 - j] = caml_string_unsafe_get (s, i + j); @@ -279,10 +278,10 @@ function caml_string_get64(s,i) { } //Provides: caml_bytes_get64 -//Requires: caml_bytes_unsafe_get, caml_string_bound_error +//Requires: caml_bytes_unsafe_get, caml_bytes_bound_error //Requires: caml_int64_of_bytes function caml_bytes_get64(s,i) { - if (i >>> 0 >= s.l - 7) caml_string_bound_error(); + if (i >>> 0 >= s.l - 7) caml_bytes_bound_error(); var a = new Array(8); for(var j = 0; j < 8; j++){ a[7 - j] = caml_bytes_unsafe_get (s, i + j); @@ -291,22 +290,31 @@ function caml_bytes_get64(s,i) { } //Provides: caml_bytes_get -//Requires: caml_string_bound_error, caml_bytes_unsafe_get +//Requires: caml_bytes_bound_error, caml_bytes_unsafe_get function caml_bytes_get (s, i) { - if (i >>> 0 >= s.l) caml_string_bound_error(); + if (i >>> 0 >= s.l) caml_bytes_bound_error(); return caml_bytes_unsafe_get (s, i); } //Provides: caml_string_set //Requires: caml_failwith +//If: js-string function caml_string_set (s, i, c) { caml_failwith("caml_string_set"); } +//Provides: caml_string_set +//Requires: caml_string_unsafe_set, caml_string_bound_error +//If: !js-string +function caml_string_set (s, i, c) { + if (i >>> 0 >= s.l) caml_string_bound_error(); + return caml_string_unsafe_set (s, i, c); +} + //Provides: caml_bytes_set16 -//Requires: caml_string_bound_error, caml_bytes_unsafe_set +//Requires: caml_bytes_bound_error, caml_bytes_unsafe_set function caml_bytes_set16(s,i,i16){ - if (i >>> 0 >= s.l - 1) caml_string_bound_error(); + if (i >>> 0 >= s.l - 1) caml_bytes_bound_error(); var b2 = 0xFF & i16 >> 8, b1 = 0xFF & i16; caml_bytes_unsafe_set (s, i + 0, b1); @@ -316,14 +324,22 @@ function caml_bytes_set16(s,i,i16){ //Provides: caml_string_set16 //Requires: caml_failwith +//If: js-string function caml_string_set16(s,i,i16){ caml_failwith("caml_string_set16"); } +//Provides: caml_string_set16 +//Requires: caml_bytes_set16 +//If: !js-string +function caml_string_set16(s,i,i16){ + return caml_bytes_set16(s,i,i16); +} + //Provides: caml_bytes_set32 -//Requires: caml_string_bound_error, caml_bytes_unsafe_set +//Requires: caml_bytes_bound_error, caml_bytes_unsafe_set function caml_bytes_set32(s,i,i32){ - if (i >>> 0 >= s.l - 3) caml_string_bound_error(); + if (i >>> 0 >= s.l - 3) caml_bytes_bound_error(); var b4 = 0xFF & i32 >> 24, b3 = 0xFF & i32 >> 16, b2 = 0xFF & i32 >> 8, @@ -337,15 +353,23 @@ function caml_bytes_set32(s,i,i32){ //Provides: caml_string_set32 //Requires: caml_failwith +//If: js-string function caml_string_set32(s,i,i32){ caml_failwith("caml_string_set32"); } +//Provides: caml_string_set32 +//Requires: caml_bytes_set32 +//If: !js-string +function caml_string_set32(s,i,i32){ + return caml_bytes_set32(s,i,i32); +} + //Provides: caml_bytes_set64 -//Requires: caml_string_bound_error, caml_bytes_unsafe_set +//Requires: caml_bytes_bound_error, caml_bytes_unsafe_set //Requires: caml_int64_to_bytes function caml_bytes_set64(s,i,i64){ - if (i >>> 0 >= s.l - 7) caml_string_bound_error(); + if (i >>> 0 >= s.l - 7) caml_bytes_bound_error(); var a = caml_int64_to_bytes(i64); for(var j = 0; j < 8; j++) { caml_bytes_unsafe_set (s, i + 7 - j, a[j]); @@ -355,17 +379,35 @@ function caml_bytes_set64(s,i,i64){ //Provides: caml_string_set64 //Requires: caml_failwith +//If: js-string function caml_string_set64(s,i,i64){ caml_failwith("caml_string_set64"); } +//Provides: caml_string_set64 +//Requires: caml_bytes_set64 +//If: !js-string +function caml_string_set64(s,i,i64){ + return caml_bytes_set64(s,i,i64); +} + //Provides: caml_bytes_set -//Requires: caml_string_bound_error, caml_bytes_unsafe_set +//Requires: caml_bytes_bound_error, caml_bytes_unsafe_set function caml_bytes_set (s, i, c) { - if (i >>> 0 >= s.l) caml_string_bound_error(); + if (i >>> 0 >= s.l) caml_bytes_bound_error(); return caml_bytes_unsafe_set (s, i, c); } +//Provides: caml_bytes_of_utf16_jsstring +//Requires: caml_is_ascii, caml_utf8_of_utf16, MlBytes +function caml_bytes_of_utf16_jsstring (s) { + var tag = 9 /* BYTES | ASCII */; + if (!caml_is_ascii(s)) + tag = 8 /* BYTES | NOT_ASCII */, s = caml_utf8_of_utf16(s); + return new MlBytes(tag, s, s.length); +} + + //Provides: MlBytes //Requires: caml_convert_string_to_bytes, caml_is_ascii, caml_utf16_of_utf8 function MlBytes (tag, contents, length) { @@ -393,13 +435,13 @@ MlBytes.prototype.slice = function (){ } //Provides: caml_convert_string_to_bytes -//Requires: caml_str_repeat, caml_subarray_to_string +//Requires: caml_str_repeat, caml_subarray_to_jsbytes function caml_convert_string_to_bytes (s) { /* Assumes not BYTES */ if (s.t == 2 /* PARTIAL */) s.c += caml_str_repeat(s.l - s.c.length, '\0') else - s.c = caml_subarray_to_string (s.c, 0, s.c.length); + s.c = caml_subarray_to_jsbytes (s.c, 0, s.c.length); s.t = 0; /*BYTES | UNKOWN*/ } @@ -428,26 +470,30 @@ function caml_array_of_bytes (s) { //Provides: caml_array_of_string mutable //Requires: caml_convert_bytes_to_array +//Requires: caml_ml_string_length, caml_string_unsafe_get function caml_array_of_string (s) { - var a = new Array(s.length); - var l = s.length, i = 0; - for (; i < l; i++) a[i] = s.charCodeAt(i); + var l = caml_ml_string_length(s); + var a = new Array(l); + var i = 0; + for (; i < l; i++) a[i] = caml_string_unsafe_get(s,i); return a; } -//Provides: caml_js_to_string const -//Requires: caml_is_ascii, caml_utf8_of_utf16 -function caml_js_to_string (s) { - if (caml_is_ascii(s)) - return s - else return caml_utf8_of_utf16(s); +//Provides: caml_create_string const +//Requires: MlBytes, caml_invalid_argument +//If: !js-string +function caml_create_string(len) { + if(len < 0) caml_invalid_argument("String.create"); + return new MlBytes(len?2:9,"",len); } //Provides: caml_create_string const //Requires: caml_invalid_argument +//If: js-string function caml_create_string(len) { caml_invalid_argument("String.create"); } + //Provides: caml_create_bytes const //Requires: MlBytes,caml_invalid_argument function caml_create_bytes(len) { @@ -455,24 +501,18 @@ function caml_create_bytes(len) { return new MlBytes(len?2:9,"",len); } -//Provides: caml_new_string const (const) -function caml_new_string (s) { return s; } - //Provides: caml_string_of_array -//Requires: caml_subarray_to_string -function caml_string_of_array (a) { return caml_subarray_to_string(a,0,a.length); } +//Requires: caml_subarray_to_jsbytes, caml_string_of_jsbytes +function caml_string_of_array (a) { + return caml_string_of_jsbytes(caml_subarray_to_jsbytes(a,0,a.length)); +} //Provides: caml_bytes_of_array -//Requires: caml_subarray_to_string, caml_bytes_of_string +//Requires: MlBytes function caml_bytes_of_array (a) { - return caml_bytes_of_string(caml_subarray_to_string(a,0,a.length)); } - -//Provides: caml_string_compare const -function caml_string_compare(s1, s2) { - return (s1 < s2)?-1:(s1 > s2)?1:0; + return new MlBytes(4,a,a.length); } - //Provides: caml_bytes_compare mutable //Requires: caml_convert_string_to_bytes function caml_bytes_compare(s1, s2) { @@ -481,11 +521,6 @@ function caml_bytes_compare(s1, s2) { return (s1.c < s2.c)?-1:(s1.c > s2.c)?1:0; } -//Provides: caml_string_equal const (const, const) -function caml_string_equal(s1, s2) { - if(s1 === s2) return 1; - return 0; -} //Provides: caml_bytes_equal mutable (const, const) //Requires: caml_convert_string_to_bytes @@ -496,7 +531,7 @@ function caml_bytes_equal(s1, s2) { return (s1.c == s2.c)?1:0; } -//Provides: caml_string_notequal const (const, const) +//Provides: caml_string_notequal mutable (const, const) //Requires: caml_string_equal function caml_string_notequal(s1, s2) { return 1-caml_string_equal(s1, s2); } @@ -504,11 +539,6 @@ function caml_string_notequal(s1, s2) { return 1-caml_string_equal(s1, s2); } //Requires: caml_string_equal function caml_bytes_notequal(s1, s2) { return 1-caml_string_equal(s1, s2); } -//Provides: caml_string_lessequal const -function caml_string_lessequal(s1, s2) { - return (s1 <= s2)?1:0; -} - //Provides: caml_bytes_lessequal mutable //Requires: caml_convert_string_to_bytes function caml_bytes_lessequal(s1, s2) { @@ -517,11 +547,6 @@ function caml_bytes_lessequal(s1, s2) { return (s1.c <= s2.c)?1:0; } -//Provides: caml_string_lessthan const -function caml_string_lessthan(s1, s2) { - return (s1 < s2)?1:0; -} - //Provides: caml_bytes_lessthan mutable //Requires: caml_convert_string_to_bytes function caml_bytes_lessthan(s1, s2) { @@ -578,18 +603,18 @@ function caml_fill_bytes(s, i, l, c) { var caml_fill_string = caml_fill_bytes //Provides: caml_blit_bytes -//Requires: caml_subarray_to_string, caml_convert_bytes_to_array +//Requires: caml_subarray_to_jsbytes, caml_convert_bytes_to_array function caml_blit_bytes(s1, i1, s2, i2, len) { if (len == 0) return 0; if ((i2 == 0) && (len >= s2.l || (s2.t == 2 /* PARTIAL */ && len >= s2.c.length))) { s2.c = (s1.t == 4 /* ARRAY */)? - caml_subarray_to_string(s1.c, i1, len): + caml_subarray_to_jsbytes(s1.c, i1, len): (i1 == 0 && s1.c.length == len)?s1.c:s1.c.substr(i1, len); s2.t = (s2.c.length == s2.l)?0 /* BYTES | UNKOWN */ :2; /* PARTIAL */ } else if (s2.t == 2 /* PARTIAL */ && i2 == s2.c.length) { s2.c += (s1.t == 4 /* ARRAY */)? - caml_subarray_to_string(s1.c, i1, len): + caml_subarray_to_jsbytes(s1.c, i1, len): (i1 == 0 && s1.c.length == len)?s1.c:s1.c.substr(i1, len); s2.t = (s2.c.length == s2.l)?0 /* BYTES | UNKOWN */ :2; /* PARTIAL */ } else { @@ -617,20 +642,202 @@ function caml_blit_string(a,b,c,d,e) { return 0 } -//Provides: caml_ml_string_length const -function caml_ml_string_length(s) { return s.length } - //Provides: caml_ml_bytes_length const function caml_ml_bytes_length(s) { return s.l } +//Provides: caml_string_unsafe_get const +//If: js-string +function caml_string_unsafe_get (s, i) { + return s.charCodeAt(i); +} + +//Provides: caml_string_unsafe_set +//Requires: caml_failwith +//If: js-string +function caml_string_unsafe_set (s, i, c) { + caml_failwith("caml_string_unsafe_set"); +} + +//Provides: caml_ml_string_length const +//If: js-string +function caml_ml_string_length(s) { + return s.length +} + +//Provides: caml_string_compare const +//If: js-string +function caml_string_compare(s1, s2) { + return (s1 < s2)?-1:(s1 > s2)?1:0; +} + +//Provides: caml_string_equal const +//If: js-string +function caml_string_equal(s1, s2) { + if(s1 === s2) return 1; + return 0; +} + +//Provides: caml_string_lessequal const +//If: js-string +function caml_string_lessequal(s1, s2) { + return (s1 <= s2)?1:0; +} + +//Provides: caml_string_lessthan const +//If: js-string +function caml_string_lessthan(s1, s2) { + return (s1 < s2)?1:0; +} + //Provides: caml_string_of_bytes //Requires: caml_convert_string_to_bytes +//If: js-string function caml_string_of_bytes(s) { (s.t & 6) && caml_convert_string_to_bytes(s); return s.c; } -//Provides: caml_bytes_of_string + +//Provides: caml_bytes_of_string const //Requires: MlBytes +//Requires: caml_ml_string_length +//If: js-string function caml_bytes_of_string(s) { - return new MlBytes(0,s,s.length); + return new MlBytes(0,s,caml_ml_string_length(s)); +} + +//Provides: caml_string_of_jsbytes const +//If: js-string +function caml_string_of_jsbytes(x) { return x } + +//Provides: caml_jsbytes_of_string const +//If: js-string +function caml_jsbytes_of_string(x) { return x } + +//Provides: caml_jsstring_of_string const +//Requires: caml_is_ascii, caml_utf16_of_utf8 +//If: js-string +function caml_jsstring_of_string(s) { + if(caml_is_ascii(s)) + return s; + return caml_utf16_of_utf8(s); } + +//Provides: caml_string_of_jsstring const +//Requires: caml_is_ascii, caml_utf8_of_utf16 +//If: js-string +function caml_string_of_jsstring (s) { + if (caml_is_ascii(s)) + return s + else return caml_utf8_of_utf16(s); +} + +// The section below should be used when use-js-string=false + +//Provides: caml_string_unsafe_get const +//Requires: caml_bytes_unsafe_get +//If: !js-string +function caml_string_unsafe_get (s, i) { + return caml_bytes_unsafe_get(s,i); +} + +//Provides: caml_string_unsafe_set +//Requires: caml_bytes_unsafe_set +//If: !js-string +function caml_string_unsafe_set (s, i, c) { + return caml_bytes_unsafe_set(s,i,c); +} + +//Provides: caml_ml_string_length const +//Requires: caml_ml_bytes_length +//If: !js-string +function caml_ml_string_length(s) { + return caml_ml_bytes_length(s) +} + +//Provides: caml_string_compare +//Requires: caml_bytes_compare +//If: !js-string +function caml_string_compare(s1, s2) { + return caml_bytes_compare(s1,s2) +} + +//Provides: caml_string_equal +//Requires: caml_bytes_equal +//If: !js-string +function caml_string_equal(s1, s2) { + return caml_bytes_equal(s1,s2) +} + +//Provides: caml_string_lessequal +//Requires: caml_bytes_lessequal +//If: !js-string +function caml_string_lessequal(s1, s2) { + return caml_bytes_lessequal(s1,s2) +} + +//Provides: caml_string_lessthan +//Requires: caml_bytes_lessthan +//If: !js-string +function caml_string_lessthan(s1, s2) { + return caml_bytes_lessthan(s1,s2) +} + +//Provides: caml_string_of_bytes +//If: !js-string +function caml_string_of_bytes(s) { return s } + +//Provides: caml_bytes_of_string const +//If: !js-string +function caml_bytes_of_string(s) { return s } + +//Provides: caml_string_of_jsbytes const +//Requires: MlBytes +//If: !js-string +function caml_string_of_jsbytes(s) { return new MlBytes(0,s,s.length); } + +//Provides: caml_jsbytes_of_string const +//Requires: caml_convert_string_to_bytes +//If: !js-string +function caml_jsbytes_of_string(s) { + if ((s.t & 6) != 0 /* BYTES */) caml_convert_string_to_bytes(s); + return s.c } + +//Provides: caml_jsstring_of_string mutable (const) +//If: !js-string +function caml_jsstring_of_string(s){ + return s.toString() +} + +//Provides: caml_string_of_jsstring +//Requires: caml_bytes_of_utf16_jsstring +//If: !js-string +function caml_string_of_jsstring (s) { + return caml_bytes_of_utf16_jsstring(s); +} + +// The functions below are deprecated + +//Provides: caml_js_to_byte_string const +//Requires: caml_string_of_jsbytes +function caml_js_to_byte_string(s) { return caml_string_of_jsbytes(s) } + +//Provides: caml_new_string +//Requires: caml_string_of_jsbytes +function caml_new_string (s) { return caml_string_of_jsbytes(s) } + +//Provides: caml_js_from_string mutable (const) +//Requires: caml_jsstring_of_string +function caml_js_from_string(s) { + return caml_jsstring_of_string(s) +} + +//Provides: caml_to_js_string mutable (const) +//Requires: caml_jsstring_of_string +function caml_to_js_string(s) { + return caml_jsstring_of_string(s) +} + +//Provides: caml_js_to_string const +//Requires: caml_string_of_jsstring +function caml_js_to_string (s) { + return caml_string_of_jsstring(s); } diff --git a/runtime/stdlib.js b/runtime/stdlib.js index 13abc0e572..2da7e9f21c 100644 --- a/runtime/stdlib.js +++ b/runtime/stdlib.js @@ -104,9 +104,9 @@ function caml_call_gen(f, args) { var caml_named_values = {}; //Provides: caml_register_named_value (const,const) -//Requires: caml_named_values +//Requires: caml_named_values, caml_jsbytes_of_string function caml_register_named_value(nm,v) { - caml_named_values[nm] = v; + caml_named_values[caml_jsbytes_of_string(nm)] = v; return 0; } @@ -145,9 +145,9 @@ function caml_return_exn_constant (tag) { return tag; } function caml_raise_with_arg (tag, arg) { throw [0, tag, arg]; } //Provides: caml_raise_with_string (const, const) -//Requires: caml_raise_with_arg +//Requires: caml_raise_with_arg, caml_string_of_jsbytes function caml_raise_with_string (tag, msg) { - caml_raise_with_arg (tag, msg); + caml_raise_with_arg (tag, caml_string_of_jsbytes(msg)); } //Provides: caml_raise_sys_error (const) @@ -163,7 +163,7 @@ function caml_failwith (msg) { } //Provides: caml_wrap_exception const (const) -//Requires: caml_global_data,caml_js_to_string,caml_named_value +//Requires: caml_global_data,caml_string_of_jsstring,caml_named_value //Requires: caml_return_exn_constant function caml_wrap_exception(e) { if(e instanceof Array) return e; @@ -172,9 +172,7 @@ function caml_wrap_exception(e) { && e instanceof joo_global_object.RangeError && e.message && e.message.match(/maximum call stack/i)) - { - return caml_return_exn_constant(caml_global_data.Stack_overflow); - } + return caml_return_exn_constant(caml_global_data.Stack_overflow); //Stack_overflow: firefox if(joo_global_object.InternalError && e instanceof joo_global_object.InternalError @@ -185,7 +183,7 @@ function caml_wrap_exception(e) { if(e instanceof joo_global_object.Error && caml_named_value("jsError")) return [0,caml_named_value("jsError"),e]; //fallback: wrapped in Failure - return [0,caml_global_data.Failure,caml_js_to_string (String(e))]; + return [0,caml_global_data.Failure,caml_string_of_jsstring (String(e))]; } // Experimental @@ -481,7 +479,7 @@ function caml_compare_val (a, b, total) { case 251: //Abstract caml_invalid_argument("equal: abstract value"); break; - case 252: // OCaml string + case 252: // OCaml bytes if (a !== b) { var x = caml_bytes_compare(a, b); if (x != 0) return (x | 0); @@ -677,9 +675,10 @@ function caml_int_of_string (s) { } //Provides: caml_float_of_string (const) -//Requires: caml_failwith +//Requires: caml_failwith, caml_jsbytes_of_string function caml_float_of_string(s) { var res; + s = caml_jsbytes_of_string(s) res = +s; if ((s.length > 0) && (res === res)) return res; s = s.replace(/_/g,""); @@ -704,8 +703,9 @@ function caml_is_printable(c) { return +(c > 31 && c < 127); } ///////////// Format //Provides: caml_parse_format -//Requires: caml_invalid_argument +//Requires: caml_jsbytes_of_string, caml_invalid_argument function caml_parse_format (fmt) { + fmt = caml_jsbytes_of_string(fmt); var len = fmt.length; if (len > 31) caml_invalid_argument("format_int: format too long"); var f = @@ -759,6 +759,7 @@ function caml_parse_format (fmt) { } //Provides: caml_finish_formatting +//Requires: caml_string_of_jsbytes function caml_finish_formatting(f, rawbuffer) { if (f.uppercase) rawbuffer = rawbuffer.toUpperCase(); var len = rawbuffer.length; @@ -783,13 +784,14 @@ function caml_finish_formatting(f, rawbuffer) { buffer += rawbuffer; if (f.justify == '-') for (var i = len; i < f.width; i++) buffer += ' '; - return buffer; + return caml_string_of_jsbytes(buffer); } //Provides: caml_format_int const (const, const) //Requires: caml_parse_format, caml_finish_formatting, caml_str_repeat +//Requires: caml_string_of_jsbytes, caml_jsbytes_of_string function caml_format_int(fmt, i) { - if (fmt == "%d") return ""+i; + if (caml_jsbytes_of_string(fmt) == "%d") return caml_string_of_jsbytes(""+i); var f = caml_parse_format(fmt); if (i < 0) { if (f.signedconv) { f.sign = -1; i = -i; } else i >>>= 0; } var s = i.toString(f.base); @@ -1030,9 +1032,9 @@ function caml_hash_mix_bytes(h, v) { } //Provides: caml_hash_mix_string -//Requires: caml_hash_mix_bytes_str +//Requires: caml_hash_mix_bytes_str, caml_jsbytes_of_string function caml_hash_mix_string(h, v) { - return caml_hash_mix_bytes_str(h, v); + return caml_hash_mix_bytes_str(h, caml_jsbytes_of_string(v)); } @@ -1040,6 +1042,7 @@ function caml_hash_mix_string(h, v) { //Requires: MlBytes //Requires: caml_hash_mix_int, caml_hash_mix_final //Requires: caml_hash_mix_float, caml_hash_mix_string, caml_hash_mix_bytes, caml_custom_ops +//Requires: caml_hash_mix_bytes_str function caml_hash (count, limit, seed, obj) { var queue, rd, wr, sz, num, h, v, i, len; sz = limit; @@ -1077,7 +1080,7 @@ function caml_hash (count, limit, seed, obj) { break; } } else if (typeof v === "string") { - h = caml_hash_mix_string(h,v) + h = caml_hash_mix_bytes_str(h,v) num--; } else if (v instanceof MlBytes) { h = caml_hash_mix_bytes(h,v) @@ -1105,13 +1108,15 @@ function caml_sys_time () { } //Provides: caml_sys_get_config const +//Requires: caml_string_of_jsbytes function caml_sys_get_config () { - return [0, "Unix", 32, 0]; + return [0, caml_string_of_jsbytes("Unix"), 32, 0]; } //Provides: caml_sys_const_backend_type const +//Requires: caml_string_of_jsbytes function caml_sys_const_backend_type () { - return [0, "js_of_ocaml"]; + return [0, caml_string_of_jsbytes("js_of_ocaml")]; } //Provides: caml_sys_random_seed mutable @@ -1263,7 +1268,7 @@ function caml_set_static_env(k,v){ } //Provides: caml_sys_getenv (const) //Requires: caml_raise_not_found -//Requires: caml_js_to_string +//Requires: caml_string_of_jsstring function caml_sys_getenv (name) { var g = joo_global_object; var n = name.toString(); @@ -1271,10 +1276,10 @@ function caml_sys_getenv (name) { if(g.process && g.process.env && g.process.env[n] != undefined) - return caml_js_to_string(g.process.env[n]); + return caml_string_of_jsstring(g.process.env[n]); if(joo_global_object.jsoo_static_env && joo_global_object.jsoo_static_env[n]) - return caml_js_to_string(joo_global_object.jsoo_static_env[n]) + return caml_string_of_jsstring(joo_global_object.jsoo_static_env[n]) caml_raise_not_found (); } //Provides: caml_sys_exit @@ -1289,7 +1294,7 @@ function caml_sys_exit (code) { } //Provides: caml_argv -//Requires: caml_js_to_string +//Requires: caml_string_of_jsstring //Requires: raw_array_sub var caml_argv = ((function () { var g = joo_global_object; @@ -1305,10 +1310,10 @@ var caml_argv = ((function () { args = raw_array_sub(argv,2,argv.length - 2); } - var p = caml_js_to_string(main); + var p = caml_string_of_jsstring(main); var args2 = [0, p]; for(var i = 0; i < args.length; i++) - args2.push(caml_js_to_string(args[i])); + args2.push(caml_string_of_jsstring(args[i])); return args2; })()) @@ -1425,12 +1430,14 @@ function caml_ml_runtime_warnings_enabled (_unit) { } //Provides: caml_runtime_variant +//Requires: caml_string_of_jsbytes function caml_runtime_variant(_unit) { - return ""; + return caml_string_of_jsbytes(""); } //Provides: caml_runtime_parameters +//Requires: caml_string_of_jsbytes function caml_runtime_parameters(_unit) { - return ""; + return caml_string_of_jsbytes(""); } diff --git a/tools/travis.sh b/tools/travis.sh index fcd3e084cf..8737fa244a 100644 --- a/tools/travis.sh +++ b/tools/travis.sh @@ -52,7 +52,7 @@ case $MODE in opam pin add --no-action -y js_of_ocaml-tyxml.dev -k path . opam pin add --no-action -y js_of_ocaml-toplevel.dev -k path . - opam pin add --no-action -y num https://github.com/hhugo/num.git#fix-bytes + opam pin add --no-action -y num https://github.com/ocaml/num.git#master opam install -y --best-effort --deps-only $PACKAGES || true opam install -y cohttp-lwt-unix menhir ppx_expect yojson sexplib graphics odoc