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 12cd4d6a72..06bb18876b 100644 --- a/compiler/lib/config.ml +++ b/compiler/lib/config.ml @@ -80,6 +80,8 @@ module Flag = struct let safe_string = o ~name:"safestring" ~default:true + let use_js_string = o ~name:"use-js-string" ~default:false + let check_magic = o ~name:"check-magic-number" ~default:true let compact_vardecl = o ~name:"vardecl" ~default:false diff --git a/compiler/lib/config.mli b/compiler/lib/config.mli index 727c0385cd..3ed3965c48 100644 --- a/compiler/lib/config.mli +++ b/compiler/lib/config.mli @@ -59,6 +59,8 @@ module Flag : sig val safe_string : unit -> bool + val use_js_string : unit -> bool + val check_magic : unit -> bool val enable : string -> unit diff --git a/compiler/lib/eval.ml b/compiler/lib/eval.ml index ce5dfe8543..2a694917e4 100644 --- a/compiler/lib/eval.ml +++ b/compiler/lib/eval.ml @@ -293,7 +293,8 @@ let eval_instr info i = ( prim , List.map2 prim_args prim_args' ~f:(fun arg c -> match c with - | Some ((Int _ | Float _) as c) -> Pc c + | Some ((Int _ | Float _ | IString _) as c) -> Pc c + | Some (String _ as c) when Config.Flag.use_js_string () -> Pc c | Some _ (* do not be duplicated other constant as they're not represented with constant in javascript. *) diff --git a/compiler/lib/generate.ml b/compiler/lib/generate.ml index d636a13f8c..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 - 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,12 +312,19 @@ 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 p = Share.get_prim (runtime_fun ctx) "caml_new_string" ctx.Ctx.share in - ecall p [ e ] J.N, instrs + 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 | Float_array a -> @@ -853,8 +863,8 @@ let register_bin_math_prim name prim = let _ = register_un_prim_ctx "%caml_format_int_special" `Pure (fun ctx cx loc -> - let p = Share.get_prim (runtime_fun ctx) "caml_new_string" ctx.Ctx.share in - ecall p [ J.EBin (J.Plus, str_js "", cx) ] loc); + let s = J.EBin (J.Plus, str_js "", cx) in + 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)); @@ -908,8 +918,7 @@ let _ = register_un_prim "caml_js_from_bool" `Pure (fun cx _ -> 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 -> - 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)); @@ -921,6 +930,17 @@ 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 _ -> + bool (J.EBin (J.EqEq, cx, cy))) + ]} + *) + (****) (* when raising ocaml exception and [improved_stacktrace] is enabled, tag the ocaml exception with a Javascript error (that contain js stacktrace). 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 fda13a0b9a..3416b6ab64 100644 --- a/compiler/lib/parse_bytecode.ml +++ b/compiler/lib/parse_bytecode.ml @@ -2518,7 +2518,7 @@ 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, Prim (Extern "caml_js_from_string", [ Pc (IString name) ])) + ; Let (v_name_js, Constant (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..70e8653ef2 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 = 30 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 75f4aa30e3..eff1e76d54 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 () = @@ -30,7 +31,17 @@ let%expect_test _ = let s' : string = Obj.obj (Obj.dup (Obj.repr s)) in print_bool (s = s'); print_bool (s != s') + |}; + [%expect {| + true + false + |}] +let%expect_test _ = + Util.compile_and_run + ~flags:[ "--enable"; "use-js-string" ] + {| + let print_bool b = print_endline (string_of_bool b) let () = let s = Bytes.of_string "Hello" in let s' : bytes = Obj.obj (Obj.dup (Obj.repr s)) in @@ -39,9 +50,44 @@ let%expect_test _ = Bytes.set s' 1 'a'; print_bool (s <> s') |}; + [%expect + {| + true + true + 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') + |}; [%expect {| true 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 = 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 diff --git a/compiler/tests-compiler/static_eval.ml b/compiler/tests-compiler/static_eval.ml index 7b1d2555c9..366192b02b 100644 --- a/compiler/tests-compiler/static_eval.ml +++ b/compiler/tests-compiler/static_eval.ml @@ -22,6 +22,36 @@ 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 + + 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(cst_abcdefghijklmnopqrstuvwxyz,- 10)); + var ax = call_with_char(103); + var bx = call_with_char(caml_string_get(cst_abcdefghijklmnopqrstuvwxyz,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 diff --git a/compiler/tests-compiler/variable_declaration_output.ml b/compiler/tests-compiler/variable_declaration_output.ml index 523fd1a119..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"} ;; @@ -41,7 +42,36 @@ let%expect_test _ = print_var_decl program "symbol_op"; [%expect {| - var ex = [0,5,runtime.caml_new_string("hello")]; + var ex = [0,5,"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 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.]; 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 0996356c70..f3322fbebe 100644 --- a/lib/js_of_ocaml/json.ml +++ b/lib/js_of_ocaml/json.ml @@ -38,9 +38,9 @@ let json : json Js.t = Unsafe.global##._JSON external unsafe_equals : 'a -> 'b -> bool = "caml_js_equals" -external to_byte_MlBytes : js_string t -> string = "caml_js_to_byte_string" +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" @@ -48,7 +48,7 @@ external create_int64_lo_mi_hi : int -> int -> int -> Int64.t 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/bigstring.js b/runtime/bigstring.js index 71a53ce975..b82dd588b9 100644 --- a/runtime/bigstring.js +++ b/runtime/bigstring.js @@ -1,9 +1,9 @@ ///////// BIGSTRING //Provides: caml_hash_mix_bigstring -//Requires: caml_hash_mix_string_arr +//Requires: caml_hash_mix_bytes_arr function caml_hash_mix_bigstring(h, bs) { - return caml_hash_mix_string_arr(h,bs.data); + return caml_hash_mix_bytes_arr(h,bs.data); } //Provides: bigstring_to_array_buffer mutable 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/dynlink.js b/runtime/dynlink.js index 2fda72ef42..608b0dfaae 100644 --- a/runtime/dynlink.js +++ b/runtime/dynlink.js @@ -21,12 +21,13 @@ var current_libs = [0, joo_global_object] //Provides: caml_dynlink_open_lib //Requires: current_libs, caml_failwith +//Requires: caml_jsstring_of_string function caml_dynlink_open_lib (_mode,file) { - var name = file.toString(); - joo_global_object.console.log("Dynlink: try to open ", name); - //caml_failwith("file not found: "+name) - current_libs.push({}); - return current_libs.length; + var name = caml_jsstring_of_string(file); + joo_global_object.console.log("Dynlink: try to open ", name); + //caml_failwith("file not found: "+name) + current_libs.push({}); + return current_libs.length; } //Provides: caml_dynlink_close_lib @@ -38,8 +39,9 @@ function caml_dynlink_close_lib (idx) { //Provides: caml_dynlink_lookup_symbol //Requires: current_libs +//Requires: caml_jsstring_of_string function caml_dynlink_lookup_symbol (idx, fun_name) { - var name = fun_name.toString(); + var name = caml_jsstring_of_string(fun_name); joo_global_object.console.log("Dynlink: look for symbol ", name); if(current_libs[idx] && current_libs[idx][name]) return current_libs[idx][name]; diff --git a/runtime/fs.js b/runtime/fs.js index 5a9cb546a1..84cde72ac3 100644 --- a/runtime/fs.js +++ b/runtime/fs.js @@ -35,9 +35,10 @@ var caml_root = caml_current_dir.match(/[^\/]*\//)[0]; function MlFile(){ } //Provides: caml_make_path -//Requires: caml_current_dir,MlBytes +//Requires: caml_current_dir +//Requires: caml_jsstring_of_string function caml_make_path (name) { - name=(name instanceof MlBytes)?name.toString():name; + name=caml_jsstring_of_string(name); if(name.charCodeAt(0) != 47) name = caml_current_dir + name; var comp = name.split("/"); @@ -65,12 +66,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 +114,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 @@ -133,16 +134,18 @@ function caml_sys_chdir(dir) { } //Provides: caml_raise_no_such_file -//Requires: MlBytes, caml_raise_sys_error +//Requires: caml_raise_sys_error +//Requires: caml_jsbytes_of_string function caml_raise_no_such_file(name){ - name = (name instanceof MlBytes)?name.toString():name; + name = caml_jsbytes_of_string(name); caml_raise_sys_error (name + ": No such file or directory"); } //Provides: caml_raise_not_a_dir -//Requires: MlBytes, caml_raise_sys_error +//Requires: caml_raise_sys_error +//Requires: caml_jsbytes_of_string function caml_raise_not_a_dir(name){ - name = (name instanceof MlBytes)?name.toString():name; + name = caml_jsbytes_of_string(name); caml_raise_sys_error (name + ": Not a directory"); } @@ -154,7 +157,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 +165,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/int64.js b/runtime/int64.js index d299238422..d4fa66a94b 100644 --- a/runtime/int64.js +++ b/runtime/int64.js @@ -310,7 +310,7 @@ function caml_int64_format (fmt, x) { } //Provides: caml_int64_of_string -//Requires: caml_parse_sign_and_base, caml_failwith, caml_parse_digit, MlBytes +//Requires: caml_parse_sign_and_base, caml_failwith, caml_parse_digit //Requires: caml_int64_of_int32, caml_int64_ult //Requires: caml_int64_add, caml_int64_mul, caml_int64_neg //Requires: caml_ml_string_length,caml_string_unsafe_get, MlInt64 diff --git a/runtime/io.js b/runtime/io.js index 75fa9740a4..d1d3e4d225 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; @@ -43,6 +43,7 @@ function caml_std_output(chanid,s){ //Requires: js_print_stderr, js_print_stdout //Requires: caml_std_output //Requires: resolve_fs_device +//Requires: caml_jsbytes_of_string function caml_sys_open_internal(idx,output,file,flags) { if(caml_global_data.fds === undefined) caml_global_data.fds = new Array(); flags=flags?flags:{}; @@ -73,9 +74,9 @@ function caml_sys_open (name, flags, _perms) { flags=flags[2]; } if(f.rdonly && f.wronly) - caml_raise_sys_error(name.toString() + " : flags Open_rdonly and Open_wronly are not compatible"); + caml_raise_sys_error(caml_jsbytes_of_string(name) + " : flags Open_rdonly and Open_wronly are not compatible"); if(f.text && f.binary) - caml_raise_sys_error(name.toString() + " : flags Open_text and Open_binary are not compatible"); + caml_raise_sys_error(caml_jsbytes_of_string(name) + " : flags Open_text and Open_binary are not compatible"); var root = resolve_fs_device(name); var file = root.device.open(root.rest,f); var idx = caml_global_data.fd_last_idx?caml_global_data.fd_last_idx:0; @@ -199,10 +200,10 @@ function caml_ml_set_channel_refill(chanid,f) { } //Provides: caml_ml_refill_input -//Requires: caml_ml_bytes_length +//Requires: caml_ml_string_length function caml_ml_refill_input (chan) { var str = chan.refill(); - var str_len = caml_ml_bytes_length(str); + var str_len = caml_ml_string_length(str); if (str_len == 0) chan.refill = null; chan.file.write(chan.file.length(), str, 0, str_len); return str_len; @@ -230,7 +231,7 @@ function caml_ml_input (chanid, s, i, l) { } //Provides: caml_input_value -//Requires: caml_marshal_data_size, caml_input_value_from_string, caml_create_bytes, caml_ml_channels +//Requires: caml_marshal_data_size, caml_input_value_from_bytes, caml_create_bytes, caml_ml_channels function caml_input_value (chanid) { var chan = caml_ml_channels[chanid]; @@ -244,7 +245,7 @@ function caml_input_value (chanid) { chan.file.read(chan.offset,buf,0,len); var offset = [0]; - var res = caml_input_value_from_string(buf, offset); + var res = caml_input_value_from_bytes(buf, offset); chan.offset = chan.offset + offset[0]; return res; } @@ -346,17 +347,19 @@ 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_jsbytes_of_string +//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"); - var string; + var bytes; if(offset == 0 && caml_ml_bytes_length(buffer) == len) - string = buffer; + bytes = buffer; else { - string = caml_create_bytes(len); - caml_blit_bytes(buffer,offset,string,0,len); + bytes = caml_create_bytes(len); + caml_blit_bytes(buffer,offset,bytes,0,len); } + var string = caml_string_of_bytes(bytes); var jsstring = caml_jsbytes_of_string(string); var id = jsstring.lastIndexOf("\n"); if(id < 0) @@ -370,16 +373,16 @@ function caml_ml_output_bytes(chanid,buffer,offset,len) { } //Provides: caml_ml_output -//Requires: caml_ml_output_bytes +//Requires: caml_ml_output_bytes, caml_bytes_of_string function caml_ml_output(chanid,buffer,offset,len){ - return caml_ml_output_bytes(chanid,buffer,offset,len); + return caml_ml_output_bytes(chanid,caml_bytes_of_string(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 54c5595cba..1daa80efbe 100644 --- a/runtime/jslib_js_of_ocaml.js +++ b/runtime/jslib_js_of_ocaml.js @@ -27,9 +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: MlBytes -function caml_js_from_string(s) { return s.toString(); } + //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); } @@ -37,11 +35,12 @@ 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_var mutable (const) //Requires: js_print_stderr -//Requires: MlBytes +//Requires: caml_jsstring_of_string function caml_js_var(x) { - var x = x.toString(); + var x = caml_jsstring_of_string(x); //Checks that x has the form ident[.ident]* if(!x.match(/^[a-zA-Z_$][a-zA-Z_$0-9]*(\.[a-zA-Z_$][a-zA-Z_$0-9]*)*$/)){ js_print_stderr("caml_js_var: \"" + x + "\" is not a valid JavaScript variable. continuing .."); @@ -68,10 +67,10 @@ function caml_js_fun_call(f, a) { return f.apply(null, caml_js_from_array(a)); } //Provides: caml_js_meth_call (mutable, const, shallow) -//Requires: MlBytes +//Requires: caml_jsstring_of_string //Requires: caml_js_from_array function caml_js_meth_call(o, f, args) { - return o[f.toString()].apply(o, caml_js_from_array(args)); + return o[caml_jsstring_of_string(f)].apply(o, caml_js_from_array(args)); } //Provides: caml_js_new (const, shallow) //Requires: caml_js_from_array @@ -170,35 +169,32 @@ function caml_js_wrap_meth_callback_unsafe(f) { } //Provides: caml_js_equals mutable (const, const) function caml_js_equals (x, y) { return +(x == y); } -//Provides: caml_js_to_byte_string const -//Requires: caml_new_string -function caml_js_to_byte_string (s) {return caml_new_string (s);} //Provides: caml_js_eval_string (const) -//Requires: MlBytes -function caml_js_eval_string (s) {return eval(s.toString());} +//Requires: caml_jsstring_of_string +function caml_js_eval_string (s) {return eval(caml_jsstring_of_string(s));} //Provides: caml_js_expr (const) //Requires: js_print_stderr -//Requires: MlBytes +//Requires: caml_jsstring_of_string function caml_js_expr(s) { js_print_stderr("caml_js_expr: fallback to runtime evaluation"); - return eval(s.toString());} + return eval(caml_jsstring_of_string(s));} //Provides: caml_pure_js_expr const (const) //Requires: js_print_stderr -//Requires: MlBytes +//Requires: caml_jsstring_of_string function caml_pure_js_expr (s){ js_print_stderr("caml_pure_js_expr: fallback to runtime evaluation"); - return eval(s.toString());} + return eval(caml_jsstring_of_string(s));} //Provides: caml_js_object (object_literal) -//Requires: MlBytes +//Requires: caml_jsstring_of_string function caml_js_object (a) { var o = {}; for (var i = 1; i < a.length; i++) { var p = a[i]; - o[p[1].toString()] = p[2]; + o[caml_jsstring_of_string(p[1])] = p[2]; } return o; } diff --git a/runtime/lexing.js b/runtime/lexing.js index c9fc266dff..b8841c5ecc 100644 --- a/runtime/lexing.js +++ b/runtime/lexing.js @@ -27,7 +27,7 @@ function caml_lex_array(s) { } //Provides: caml_lex_engine -//Requires: caml_failwith, caml_lex_array, caml_array_of_string +//Requires: caml_failwith, caml_lex_array, caml_array_of_bytes function caml_lex_engine(tbl, start_state, lexbuf) { var lex_buffer = 2; var lex_buffer_len = 3; @@ -52,7 +52,7 @@ function caml_lex_engine(tbl, start_state, lexbuf) { var c, state = start_state; - var buffer = caml_array_of_string(lexbuf[lex_buffer]); + var buffer = caml_array_of_bytes(lexbuf[lex_buffer]); if (state >= 0) { /* First entry */ @@ -110,7 +110,7 @@ function caml_lex_engine(tbl, start_state, lexbuf) { //Provides: caml_new_lex_engine //Requires: caml_failwith, caml_lex_array -//Requires: caml_jsbytes_of_string, caml_array_of_string +//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++; @@ -174,7 +174,7 @@ function caml_new_lex_engine(tbl, start_state, lexbuf) { var c, state = start_state; - var buffer = caml_array_of_string(lexbuf[lex_buffer]); + var buffer = caml_array_of_bytes(lexbuf[lex_buffer]); if (state >= 0) { /* First entry */ diff --git a/runtime/marshal.js b/runtime/marshal.js index 76352dc0ab..c3c7490bf4 100644 --- a/runtime/marshal.js +++ b/runtime/marshal.js @@ -47,10 +47,10 @@ var caml_marshal_constants = { } -//Provides: MlBytesReader -//Requires: caml_new_string, caml_jsbytes_of_string -function MlBytesReader (s, i) { this.s = caml_jsbytes_of_string(s); this.i = i; } -MlBytesReader.prototype = { +//Provides: MlStringReader +//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; }, read16u:function () { @@ -78,7 +78,7 @@ MlBytesReader.prototype = { readstr:function (len) { var i = this.i; this.i = i + len; - return caml_new_string(this.s.substring(i, i + len)); + return caml_string_of_jsbytes(this.s.substring(i, i + len)); } } @@ -130,16 +130,16 @@ function caml_float_of_bytes (a) { } //Provides: caml_input_value_from_string mutable -//Requires: MlBytesReader, caml_input_value_from_reader +//Requires: MlStringReader, caml_input_value_from_reader function caml_input_value_from_string(s,ofs) { - var reader = new MlBytesReader (s, typeof ofs=="number"?ofs:ofs[0]); + var reader = new MlStringReader (s, typeof ofs=="number"?ofs:ofs[0]); return caml_input_value_from_reader(reader, ofs) } //Provides: caml_input_value_from_bytes mutable -//Requires: MlBytesReader, caml_input_value_from_reader +//Requires: MlStringReader, caml_input_value_from_reader, caml_string_of_bytes function caml_input_value_from_bytes(s,ofs) { - var reader = new MlBytesReader (s, typeof ofs=="number"?ofs:ofs[0]); + var reader = new MlStringReader (caml_string_of_bytes(s), typeof ofs=="number"?ofs:ofs[0]); return caml_input_value_from_reader(reader, ofs) } @@ -452,9 +452,10 @@ var caml_legacy_custom_code = true //Provides: caml_output_val //Requires: caml_int64_to_bytes, caml_failwith //Requires: caml_int64_bits_of_float -//Requires: MlBytes, caml_ml_string_length, caml_string_unsafe_get +//Requires: caml_is_ml_bytes, caml_ml_bytes_length, caml_bytes_unsafe_get +//Requires: caml_is_ml_string, caml_ml_string_length, caml_string_unsafe_get //Requires: MlObjectTable, caml_list_to_js_array, caml_legacy_custom_code, caml_custom_ops -//Requires: caml_invalid_argument +//Requires: caml_invalid_argument,caml_string_of_jsbytes var caml_output_val = function (){ function Writer () { this.chunk = []; } Writer.prototype = { @@ -563,8 +564,23 @@ var caml_output_val = function (){ writer.size_32 += v.length; writer.size_64 += v.length; if (v.length > 1) stack.push (v, 1); - } else if (v instanceof MlBytes) { + } else if (caml_is_ml_bytes(v)) { + if(!(caml_is_ml_bytes(caml_string_of_jsbytes("")))) { + caml_failwith("output_value: [Bytes.t] cannot safely be marshaled with [--enable use-js-string]"); + } if (memo(v)) return; + var len = caml_ml_bytes_length(v); + if (len < 0x20) + writer.write (8, 0x20 /*cst.PREFIX_SMALL_STRING*/ + len); + else if (len < 0x100) + writer.write_code (8, 0x09/*cst.CODE_STRING8*/, len); + else + writer.write_code (32, 0x0A /*cst.CODE_STRING32*/, len); + for (var i = 0;i < len;i++) + writer.write (8, caml_bytes_unsafe_get(v,i)); + writer.size_32 += 1 + (((len + 4) / 4)|0); + writer.size_64 += 1 + (((len + 8) / 8)|0); + } else if (caml_is_ml_string(v)) { var len = caml_ml_string_length(v); if (len < 0x20) writer.write (8, 0x20 /*cst.PREFIX_SMALL_STRING*/ + len); @@ -624,9 +640,9 @@ function caml_output_value_to_string (v, flags) { } //Provides: caml_output_value_to_bytes mutable -//Requires: caml_output_val, caml_string_of_array +//Requires: caml_output_val, caml_bytes_of_array function caml_output_value_to_bytes (v, flags) { - return caml_string_of_array (caml_output_val (v, flags)); + return caml_bytes_of_array (caml_output_val (v, flags)); } //Provides: caml_output_value_to_buffer diff --git a/runtime/md5.js b/runtime/md5.js index 01212a237a..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)); diff --git a/runtime/mlString.js b/runtime/mlBytes.js similarity index 64% rename from runtime/mlString.js rename to runtime/mlBytes.js index 3c7fc6a085..2494c6e639 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 = ""; @@ -162,8 +162,8 @@ function caml_utf16_of_utf8(s) { return b+t; } -//Provides: caml_is_ascii -function caml_is_ascii (s) { +//Provides: jsoo_is_ascii +function jsoo_is_ascii (s) { // The regular expression gets better at around this point for all browsers if (s.length < 24) { // Spidermonkey gets much slower when s.length >= 24 (on 64 bit archs) @@ -173,37 +173,6 @@ function caml_is_ascii (s) { return !/[^\x00-\x7f]/.test(s); } -//Provides: caml_to_js_string -//Requires: caml_convert_string_to_bytes, caml_is_ascii, caml_utf16_of_utf8 -function caml_to_js_string(s) { - switch (s.t) { - case 9: /*BYTES | ASCII*/ - return s.c; - default: - caml_convert_string_to_bytes(s); - case 0: /*BYTES | UNKOWN*/ - if (caml_is_ascii(s.c)) { - s.t = 9; /*BYTES | ASCII*/ - return s.c; - } - s.t = 8; /*BYTES | NOT_ASCII*/ - case 8: /*BYTES | NOT_ASCII*/ - return caml_utf16_of_utf8(s.c); - } -} - -//Provides: caml_string_unsafe_get mutable -function caml_string_unsafe_get (s, i) { - switch (s.t & 6) { - default: /* PARTIAL */ - if (i >= s.c.length) return 0; - case 0: /* BYTES */ - return s.c.charCodeAt(i); - case 4: /* ARRAY */ - return s.c[i] - } -} - //Provides: caml_bytes_unsafe_get mutable function caml_bytes_unsafe_get (s, i) { switch (s.t & 6) { @@ -217,7 +186,7 @@ function caml_bytes_unsafe_get (s, i) { } //Provides: caml_bytes_unsafe_set -//Requires: caml_convert_string_to_array +//Requires: caml_convert_bytes_to_array function caml_bytes_unsafe_set (s, i, c) { // The OCaml compiler uses Char.unsafe_chr on integers larger than 255! c &= 0xff; @@ -227,44 +196,46 @@ function caml_bytes_unsafe_set (s, i, c) { if (i + 1 == s.l) s.t = 0; /*BYTES | UNKOWN*/ return 0; } - caml_convert_string_to_array (s); + caml_convert_bytes_to_array (s); } s.c[i] = c; return 0; } -//Provides: caml_string_unsafe_set -//Requires: caml_bytes_unsafe_set -function caml_string_unsafe_set (s, i, c) { - return caml_bytes_unsafe_set(s,i,c); -} - //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.l) 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.l - 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); @@ -272,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.l - 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), @@ -282,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), @@ -295,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.l - 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); @@ -305,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); @@ -317,23 +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); @@ -341,16 +322,24 @@ function caml_bytes_set16(s,i,i16){ return 0 } +//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, @@ -362,17 +351,25 @@ function caml_bytes_set32(s,i,i32){ return 0 } +//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]); @@ -380,43 +377,76 @@ function caml_bytes_set64(s,i,i64){ return 0 } +//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: jsoo_is_ascii, caml_utf8_of_utf16, MlBytes +function caml_bytes_of_utf16_jsstring (s) { + var tag = 9 /* BYTES | ASCII */; + if (!jsoo_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_to_js_string +//Requires: caml_convert_string_to_bytes, jsoo_is_ascii, caml_utf16_of_utf8 function MlBytes (tag, contents, length) { this.t=tag; this.c=contents; this.l=length; } -MlBytes.prototype.toString = function(){return caml_to_js_string(this)}; +MlBytes.prototype.toString = function(){ + switch (this.t) { + case 9: /*BYTES | ASCII*/ + return this.c; + default: + caml_convert_string_to_bytes(this); + case 0: /*BYTES | UNKOWN*/ + if (jsoo_is_ascii(this.c)) { + this.t = 9; /*BYTES | ASCII*/ + return this.c; + } + this.t = 8; /*BYTES | NOT_ASCII*/ + case 8: /*BYTES | NOT_ASCII*/ + return caml_utf16_of_utf8(this.c); + } +}; MlBytes.prototype.slice = function (){ var content = this.t == 4 ? this.c.slice() : this.c; return new MlBytes(this.t,content,this.l); } //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*/ } -//Provides: caml_convert_string_to_array -function caml_convert_string_to_array (s) { +//Provides: caml_convert_bytes_to_array +function caml_convert_bytes_to_array (s) { /* Assumes not ARRAY */ if(joo_global_object.Uint8Array) { var a = new joo_global_object.Uint8Array(s.l); @@ -431,42 +461,39 @@ function caml_convert_string_to_array (s) { return a; } -//Provides: caml_array_of_string mutable -//Requires: caml_convert_string_to_array -function caml_array_of_string (s) { - if (s.t != 4 /* ARRAY */) caml_convert_string_to_array(s); - return s.c; -} - //Provides: caml_array_of_bytes mutable -//Requires: caml_convert_string_to_array +//Requires: caml_convert_bytes_to_array function caml_array_of_bytes (s) { - if (s.t != 4 /* ARRAY */) caml_convert_string_to_array(s); + if (s.t != 4 /* ARRAY */) caml_convert_bytes_to_array(s); return s.c; } -//Provides: caml_jsbytes_of_string mutable -//Requires: caml_convert_string_to_bytes -function caml_jsbytes_of_string (s) { - if ((s.t & 6) != 0 /* BYTES */) caml_convert_string_to_bytes(s); - return s.c; +//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 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, MlBytes -function caml_js_to_string (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: 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: MlBytes,caml_invalid_argument +//Requires: 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); + caml_invalid_argument("String.create"); } + //Provides: caml_create_bytes const //Requires: MlBytes,caml_invalid_argument function caml_create_bytes(len) { @@ -474,27 +501,18 @@ function caml_create_bytes(len) { return new MlBytes(len?2:9,"",len); } -//Provides: caml_new_string const (const) -//Requires: MlBytes -function caml_new_string (s) { return new MlBytes(0,s,s.length); } - //Provides: caml_string_of_array -//Requires: MlBytes -function caml_string_of_array (a) { return new MlBytes(4,a,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: MlBytes -function caml_bytes_of_array (a) { return new MlBytes(4,a,a.length); } - -//Provides: caml_string_compare mutable -//Requires: caml_convert_string_to_bytes -function caml_string_compare(s1, s2) { - (s1.t & 6) && caml_convert_string_to_bytes(s1); - (s2.t & 6) && caml_convert_string_to_bytes(s2); - return (s1.c < s2.c)?-1:(s1.c > s2.c)?1:0; +function caml_bytes_of_array (a) { + return new MlBytes(4,a,a.length); } - //Provides: caml_bytes_compare mutable //Requires: caml_convert_string_to_bytes function caml_bytes_compare(s1, s2) { @@ -503,14 +521,6 @@ function caml_bytes_compare(s1, s2) { return (s1.c < s2.c)?-1:(s1.c > s2.c)?1:0; } -//Provides: caml_string_equal mutable (const, const) -//Requires: caml_convert_string_to_bytes -function caml_string_equal(s1, s2) { - if(s1 === s2) return 1; - (s1.t & 6) && caml_convert_string_to_bytes(s1); - (s2.t & 6) && caml_convert_string_to_bytes(s2); - return (s1.c == s2.c)?1:0; -} //Provides: caml_bytes_equal mutable (const, const) //Requires: caml_convert_string_to_bytes @@ -529,14 +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 mutable -//Requires: caml_convert_string_to_bytes -function caml_string_lessequal(s1, s2) { - (s1.t & 6) && caml_convert_string_to_bytes(s1); - (s2.t & 6) && caml_convert_string_to_bytes(s2); - return (s1.c <= s2.c)?1:0; -} - //Provides: caml_bytes_lessequal mutable //Requires: caml_convert_string_to_bytes function caml_bytes_lessequal(s1, s2) { @@ -545,14 +547,6 @@ function caml_bytes_lessequal(s1, s2) { return (s1.c <= s2.c)?1:0; } -//Provides: caml_string_lessthan mutable -//Requires: caml_convert_string_to_bytes -function caml_string_lessthan(s1, s2) { - (s1.t & 6) && caml_convert_string_to_bytes(s1); - (s2.t & 6) && caml_convert_string_to_bytes(s2); - return (s1.c < s2.c)?1:0; -} - //Provides: caml_bytes_lessthan mutable //Requires: caml_convert_string_to_bytes function caml_bytes_lessthan(s1, s2) { @@ -585,7 +579,7 @@ function caml_bytes_greaterthan(s1, s2) { } //Provides: caml_fill_bytes -//Requires: caml_str_repeat, caml_convert_string_to_array +//Requires: caml_str_repeat, caml_convert_bytes_to_array function caml_fill_bytes(s, i, l, c) { if (l > 0) { if (i == 0 && (l >= s.l || (s.t == 2 /* PARTIAL */ && l >= s.c.length))) { @@ -597,7 +591,7 @@ function caml_fill_bytes(s, i, l, c) { s.t = (l == s.l)?0 /* BYTES | UNKOWN */ :2; /* PARTIAL */ } } else { - if (s.t != 4 /* ARRAY */) caml_convert_string_to_array(s); + if (s.t != 4 /* ARRAY */) caml_convert_bytes_to_array(s); for (l += i; i < l; i++) s.c[i] = c; } } @@ -609,22 +603,22 @@ 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_string_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 { - if (s2.t != 4 /* ARRAY */) caml_convert_string_to_array(s2); + if (s2.t != 4 /* ARRAY */) caml_convert_bytes_to_array(s2); var c1 = s1.c, c2 = s2.c; if (s1.t == 4 /* ARRAY */) { if (i2 <= i1) { @@ -642,20 +636,232 @@ function caml_blit_bytes(s1, i1, s2, i2, len) { } //Provides: caml_blit_string -//Requires: caml_blit_bytes -function caml_blit_string(s1, i1, s2, i2, len) { - // TODO: s1 -> string to bytes - return caml_blit_bytes(s1, i1, s2, i2, len); +//Requires: caml_blit_bytes, caml_bytes_of_string +function caml_blit_string(a,b,c,d,e) { + caml_blit_bytes(caml_bytes_of_string(a),b,c,d,e); + return 0 } -//Provides: caml_ml_string_length const -function caml_ml_string_length(s) { return s.l } - //Provides: caml_ml_bytes_length const function caml_ml_bytes_length(s) { return s.l } -//Provides: caml_string_of_bytes const -function caml_string_of_bytes(s) { return s} +//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, caml_string_of_jsbytes +//If: js-string +function caml_string_of_bytes(s) { + (s.t & 6) && caml_convert_string_to_bytes(s); + return caml_string_of_jsbytes(s.c); +} //Provides: caml_bytes_of_string const -function caml_bytes_of_string(s) { return s} +//Requires: caml_bytes_of_jsbytes, caml_jsbytes_of_string +//If: js-string +function caml_bytes_of_string(s) { + return caml_bytes_of_jsbytes(caml_jsbytes_of_string(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: jsoo_is_ascii, caml_utf16_of_utf8 +//If: js-string +function caml_jsstring_of_string(s) { + if(jsoo_is_ascii(s)) + return s; + return caml_utf16_of_utf8(s); } + +//Provides: caml_string_of_jsstring const +//Requires: jsoo_is_ascii, caml_utf8_of_utf16, caml_string_of_jsbytes +//If: js-string +function caml_string_of_jsstring (s) { + if (jsoo_is_ascii(s)) + return caml_string_of_jsbytes(s) + else return caml_string_of_jsbytes(caml_utf8_of_utf16(s)); +} + +//Provides: caml_bytes_of_jsbytes const +//Requires: MlBytes +function caml_bytes_of_jsbytes(s) { return new MlBytes(0,s,s.length); } + + +// 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: caml_bytes_of_jsbytes +//If: !js-string +function caml_string_of_jsbytes(s) { return caml_bytes_of_jsbytes(s); } + +//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); +} + +//Provides: caml_is_ml_bytes +//Requires: MlBytes +function caml_is_ml_bytes(s) { + return (s instanceof MlBytes); +} + +//Provides: caml_is_ml_string +//Requires: jsoo_is_ascii +//If: js-string +function caml_is_ml_string(s) { + return (typeof s === "string" && !/[^\x00-\xff]/.test(s)); +} + +//Provides: caml_is_ml_string +//Requires: caml_is_ml_bytes +//If: !js-string +function caml_is_ml_string(s) { + return caml_is_ml_bytes(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 4495500b67..517320e64e 100644 --- a/runtime/stdlib.js +++ b/runtime/stdlib.js @@ -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,caml_new_string +//Requires: caml_raise_with_arg, caml_string_of_jsbytes function caml_raise_with_string (tag, msg) { - caml_raise_with_arg (tag, caml_new_string (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; @@ -183,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 @@ -242,11 +242,13 @@ function caml_obj_is_block (x) { return +(x instanceof Array); } //Provides: caml_obj_tag -//Requires: MlBytes +//Requires: caml_is_ml_bytes, caml_is_ml_string function caml_obj_tag (x) { if ((x instanceof Array) && x[0] == (x[0] >>> 0)) return x[0] - else if (x instanceof MlBytes) + else if (caml_is_ml_bytes(x)) + return 252 + else if (caml_is_ml_string(x)) return 252 else if ((x instanceof Function) || typeof x == "function") return 247 @@ -384,10 +386,11 @@ function caml_floatarray_create(len){ } //Provides: caml_compare_val_tag -//Requires: MlBytes +//Requires: caml_is_ml_string, caml_is_ml_bytes function caml_compare_val_tag(a){ if (typeof a === "number") return 1000; // int_tag (we use it for all numbers) - else if (a instanceof MlBytes) return 252; // string_tag + else if (caml_is_ml_bytes(a)) return 252; // string_tag + else if (caml_is_ml_string(a)) return 1252; // ocaml string (if different from bytes) else if (a instanceof Array && a[0] === (a[0]>>>0) && a[0] <= 255) { // Look like an ocaml block var tag = a[0] | 0; @@ -395,8 +398,8 @@ function caml_compare_val_tag(a){ // this tag when we create an array of float. return (tag == 254)?0:tag } - else if (a instanceof String) return 1252; // javascript string, like string_tag (252) - else if (typeof a == "string") return 1252; // javascript string, like string_tag (252) + else if (a instanceof String) return 12520; // javascript string, like string_tag (252) + else if (typeof a == "string") return 12520; // javascript string, like string_tag (252) else if (a instanceof Number) return 1000; // int_tag (we use it for all numbers) else if (a && a.caml_custom) return 1255; // like custom_tag (255) else if (a && a.compare) return 1256; // like custom_tag (255) @@ -425,9 +428,10 @@ function caml_compare_val_number_custom(num, custom, swap, total) { } //Provides: caml_compare_val (const, const, const) -//Requires: caml_int_compare, caml_string_compare +//Requires: caml_int_compare, caml_string_compare, caml_bytes_compare //Requires: caml_invalid_argument, caml_compare_val_get_custom, caml_compare_val_tag //Requires: caml_compare_val_number_custom +//Requires: caml_jsbytes_of_string function caml_compare_val (a, b, total) { var stack = []; for(;;) { @@ -477,9 +481,9 @@ 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_string_compare(a, b); + var x = caml_bytes_compare(a, b); if (x != 0) return (x | 0); }; break; @@ -562,7 +566,15 @@ function caml_compare_val (a, b, total) { return 1; } break; - case 1252: // javascript strings + case 1252: // ocaml strings + var a = caml_jsbytes_of_string(a); + var b = caml_jsbytes_of_string(b); + if(a !== b) { + if(a < b) return -1; + if(a > b) return 1; + } + break; + case 12520: // javascript strings var a = a.toString(); var b = b.toString(); if(a !== b) { @@ -676,7 +688,7 @@ function caml_int_of_string (s) { //Requires: caml_failwith, caml_jsbytes_of_string function caml_float_of_string(s) { var res; - s = caml_jsbytes_of_string (s); + s = caml_jsbytes_of_string(s) res = +s; if ((s.length > 0) && (res === res)) return res; s = s.replace(/_/g,""); @@ -757,7 +769,7 @@ function caml_parse_format (fmt) { } //Provides: caml_finish_formatting -//Requires: caml_new_string +//Requires: caml_string_of_jsbytes function caml_finish_formatting(f, rawbuffer) { if (f.uppercase) rawbuffer = rawbuffer.toUpperCase(); var len = rawbuffer.length; @@ -782,14 +794,14 @@ function caml_finish_formatting(f, rawbuffer) { buffer += rawbuffer; if (f.justify == '-') for (var i = len; i < f.width; i++) buffer += ' '; - return caml_new_string (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_new_string, caml_jsbytes_of_string +//Requires: caml_string_of_jsbytes, caml_jsbytes_of_string function caml_format_int(fmt, i) { - if (caml_jsbytes_of_string(fmt) == "%d") return caml_new_string(""+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); @@ -869,9 +881,10 @@ function caml_format_float (fmt, x) { ///////////// Hashtbl //Provides: caml_hash_univ_param mutable -//Requires: MlBytes, caml_convert_string_to_bytes +//Requires: caml_is_ml_string, caml_is_ml_bytes +//Requires: caml_convert_string_to_bytes //Requires: caml_int64_to_bytes, caml_int64_bits_of_float, caml_custom_ops -//Requires: caml_ml_bytes_length +//Requires: caml_ml_bytes_length, caml_jsbytes_of_string function caml_hash_univ_param (count, limit, obj) { var hash_accu = 0; function hash_aux (obj) { @@ -892,7 +905,7 @@ function caml_hash_univ_param (count, limit, obj) { hash_accu = (hash_accu * 19 + obj[0]) | 0; for (var i = obj.length - 1; i > 0; i--) hash_aux (obj[i]); } - } else if (obj instanceof MlBytes) { + } else if (caml_is_ml_bytes(obj)) { count --; switch (obj.t & 6) { default: /* PARTIAL */ @@ -905,6 +918,13 @@ function caml_hash_univ_param (count, limit, obj) { for (var a = obj.c, l = caml_ml_bytes_length(obj), i = 0; i < l; i++) hash_accu = (hash_accu * 19 + a[i]) | 0; } + } else if (caml_is_ml_string(obj)) { + var jsbytes = caml_jsbytes_of_string(obj); + for (var b = jsbytes, l = jsbytes.length, i = 0; i < l; i++) + hash_accu = (hash_accu * 19 + b.charCodeAt(i)) | 0; + } else if (typeof obj === "string") { + for (var b = obj, l = obj.length, i = 0; i < l; i++) + hash_accu = (hash_accu * 19 + b.charCodeAt(i)) | 0; } else if (obj === (obj|0)) { // Integer count --; @@ -962,9 +982,9 @@ function caml_hash_mix_int64 (h, v) { return h; } -//Provides: caml_hash_mix_string_str +//Provides: caml_hash_mix_jsbytes //Requires: caml_hash_mix_int -function caml_hash_mix_string_str(h, s) { +function caml_hash_mix_jsbytes(h, s) { var len = s.length, i, w; for (i = 0; i + 4 <= len; i += 4) { w = s.charCodeAt(i) @@ -986,9 +1006,9 @@ function caml_hash_mix_string_str(h, s) { return h; } -//Provides: caml_hash_mix_string_arr +//Provides: caml_hash_mix_bytes_arr //Requires: caml_hash_mix_int -function caml_hash_mix_string_arr(h, s) { +function caml_hash_mix_bytes_arr(h, s) { var len = s.length, i, w; for (i = 0; i + 4 <= len; i += 4) { w = s[i] @@ -1009,28 +1029,35 @@ function caml_hash_mix_string_arr(h, s) { return h; } -//Provides: caml_hash_mix_string +//Provides: caml_hash_mix_bytes //Requires: caml_convert_string_to_bytes -//Requires: caml_hash_mix_string_str -//Requires: caml_hash_mix_string_arr -function caml_hash_mix_string(h, v) { +//Requires: caml_hash_mix_jsbytes +//Requires: caml_hash_mix_bytes_arr +function caml_hash_mix_bytes(h, v) { switch (v.t & 6) { default: caml_convert_string_to_bytes (v); case 0: /* BYTES */ - h = caml_hash_mix_string_str(h, v.c); + h = caml_hash_mix_jsbytes(h, v.c); break; case 2: /* ARRAY */ - h = caml_hash_mix_string_arr(h, v.c); + h = caml_hash_mix_bytes_arr(h, v.c); } return h } +//Provides: caml_hash_mix_string +//Requires: caml_hash_mix_jsbytes, caml_jsbytes_of_string +function caml_hash_mix_string(h, v) { + return caml_hash_mix_jsbytes(h, caml_jsbytes_of_string(v)); +} + //Provides: caml_hash mutable -//Requires: MlBytes +//Requires: caml_is_ml_string, caml_is_ml_bytes //Requires: caml_hash_mix_int, caml_hash_mix_final -//Requires: caml_hash_mix_float, caml_hash_mix_string, caml_custom_ops +//Requires: caml_hash_mix_float, caml_hash_mix_string, caml_hash_mix_bytes, caml_custom_ops +//Requires: caml_hash_mix_jsbytes function caml_hash (count, limit, seed, obj) { var queue, rd, wr, sz, num, h, v, i, len; sz = limit; @@ -1067,9 +1094,15 @@ function caml_hash (count, limit, seed, obj) { } break; } - } else if (v instanceof MlBytes) { + } else if (caml_is_ml_bytes(v)) { + h = caml_hash_mix_bytes(h,v) + num--; + } else if (caml_is_ml_string(v)) { h = caml_hash_mix_string(h,v) num--; + } else if (typeof v === "string") { + h = caml_hash_mix_jsbytes(h,v) + num--; } else if (v === (v|0)) { // Integer h = caml_hash_mix_int(h, v+v+1); @@ -1093,15 +1126,15 @@ function caml_sys_time () { } //Provides: caml_sys_get_config const -//Requires: caml_new_string +//Requires: caml_string_of_jsbytes function caml_sys_get_config () { - return [0, caml_new_string("Unix"), 32, 0]; + return [0, caml_string_of_jsbytes("Unix"), 32, 0]; } //Provides: caml_sys_const_backend_type const -//Requires: caml_new_string +//Requires: caml_string_of_jsbytes function caml_sys_const_backend_type () { - return [0, caml_new_string("js_of_ocaml")]; + return [0, caml_string_of_jsbytes("js_of_ocaml")]; } //Provides: caml_sys_random_seed mutable @@ -1134,8 +1167,9 @@ function caml_sys_const_ostype_unix () { return 1; } function caml_sys_const_ostype_win32 () { return 0; } //Provides: caml_sys_system_command +//Requires: caml_jsstring_of_string function caml_sys_system_command(cmd){ - var cmd = cmd.toString(); + var cmd = caml_jsstring_of_string(cmd); if (typeof require != "undefined" && require('child_process') && require('child_process').execSync) { @@ -1252,18 +1286,19 @@ 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 +//Requires: caml_jsstring_of_string function caml_sys_getenv (name) { var g = joo_global_object; - var n = name.toString(); + var n = caml_jsstring_of_string(name); //nodejs env 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 @@ -1278,7 +1313,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; @@ -1294,10 +1329,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; })()) @@ -1414,14 +1449,14 @@ function caml_ml_runtime_warnings_enabled (_unit) { } //Provides: caml_runtime_variant -//Requires: caml_new_string +//Requires: caml_string_of_jsbytes function caml_runtime_variant(_unit) { - return caml_new_string(""); + return caml_string_of_jsbytes(""); } //Provides: caml_runtime_parameters -//Requires: caml_new_string +//Requires: caml_string_of_jsbytes function caml_runtime_parameters(_unit) { - return caml_new_string(""); + return caml_string_of_jsbytes(""); } diff --git a/tools/travis.sh b/tools/travis.sh index e1add78129..8737fa244a 100644 --- a/tools/travis.sh +++ b/tools/travis.sh @@ -52,6 +52,8 @@ 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/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 opam upgrade --yes