@@ -402,7 +402,8 @@ let erase_toplevel_phrases phrases =
402402 List .map
403403 (function
404404 | Ptop_def str -> Ptop_def (erase_str_items str )
405- | Ptop_dir _ as phrase -> phrase )
405+ | Ptop_dir _ as phrase -> phrase
406+ | Ptop_lex lex -> Ptop_lex lex )
406407 phrases
407408
408409(*
@@ -774,6 +775,16 @@ let package_type_of_module_type pmty =
774775 | _ ->
775776 err pmty.pmty_loc Neither_identifier_nor_with_type
776777
778+ let mk_hashsyntax ~loc mode toggle =
779+ Ptop_lex {
780+ plex_desc =
781+ Plex_syntax {
782+ psyn_mode = mode;
783+ psyn_toggle = toggle;
784+ };
785+ plex_loc = make_loc loc;
786+ }
787+
777788let mk_directive_arg ~loc k =
778789 { pdira_desc = k;
779790 pdira_loc = make_loc loc;
@@ -990,6 +1001,7 @@ let erase_call_pos_type ~arg_label ~arg_type ~loc =
9901001% token LESSLBRACKET " <["
9911002% token RBRACKETGREATER " ]>"
9921003% token DOLLAR " $"
1004+ % token < string * bool > HASH_SYNTAX " #syntax foo on" (* just an example *)
9931005(* End Jane Street extension *)
9941006
9951007/* Precedences and associativities.
@@ -4949,9 +4961,12 @@ any_longident:
49494961/* Toplevel directives */
49504962
49514963toplevel_directive:
4952- hash dir = mkrhs(ident)
4953- arg = ioption(mk_directive_arg(toplevel_directive_argument))
4954- { mk_directive ~loc:$sloc dir arg }
4964+ | HASH_SYNTAX
4965+ { let mode, toggle = $1 in
4966+ mk_hashsyntax ~loc:$sloc (mkloc mode (make_loc $sloc)) toggle }
4967+ | hash dir = mkrhs(ident)
4968+ arg = ioption(mk_directive_arg(toplevel_directive_argument))
4969+ { mk_directive ~loc:$sloc dir arg }
49554970;
49564971
49574972%inline toplevel_directive_argument:
0 commit comments