let loc = Ppxlib.Location.none [%%expect{| val loc : Warnings.loc = {Ppxlib.Location.loc_start = {Lexing.pos_fname = "_none_"; pos_lnum = 0; pos_bol = 0; pos_cnum = -1}; loc_end = {Lexing.pos_fname = "_none_"; pos_lnum = 0; pos_bol = 0; pos_cnum = -1}; loc_ghost = true} |}] (* unannotated quotations *) let _ = [%expr ()] [%%expect{| - : Ppxlib.expression = {Ppxlib_ast.Ast.pexp_desc = Ppxlib_ast.Ast.Pexp_construct ({Ppxlib_ast.Ast.txt = Ppxlib_ast.Ast.Lident "()"; loc = {Ppxlib_ast.Ast.loc_start = {Ppxlib_ast.Ast.pos_fname = "_none_"; pos_lnum = 0; pos_bol = 0; pos_cnum = -1}; loc_end = {Ppxlib_ast.Ast.pos_fname = "_none_"; pos_lnum = 0; pos_bol = 0; pos_cnum = -1}; loc_ghost = true}}, None); pexp_loc = {Ppxlib_ast.Ast.loc_start = {Ppxlib_ast.Ast.pos_fname = "_none_"; pos_lnum = 0; pos_bol = 0; pos_cnum = -1}; loc_end = {Ppxlib_ast.Ast.pos_fname = "_none_"; pos_lnum = 0; pos_bol = 0; pos_cnum = -1}; loc_ghost = true}; pexp_loc_stack = []; pexp_attributes = []} |}] let _ = [%pat? ()] [%%expect{| - : Ppxlib.pattern = {Ppxlib_ast.Ast.ppat_desc = Ppxlib_ast.Ast.Ppat_construct ({Ppxlib_ast.Ast.txt = Ppxlib_ast.Ast.Lident "()"; loc = {Ppxlib_ast.Ast.loc_start = {Ppxlib_ast.Ast.pos_fname = "_none_"; pos_lnum = 0; pos_bol = 0; pos_cnum = -1}; loc_end = {Ppxlib_ast.Ast.pos_fname = "_none_"; pos_lnum = 0; pos_bol = 0; pos_cnum = -1}; loc_ghost = true}}, None); ppat_loc = {Ppxlib_ast.Ast.loc_start = {Ppxlib_ast.Ast.pos_fname = "_none_"; pos_lnum = 0; pos_bol = 0; pos_cnum = -1}; loc_end = {Ppxlib_ast.Ast.pos_fname = "_none_"; pos_lnum = 0; pos_bol = 0; pos_cnum = -1}; loc_ghost = true}; ppat_loc_stack = []; ppat_attributes = []} |}] let _ = [%type: unit] [%%expect{| - : Ppxlib.core_type = {Ppxlib_ast.Ast.ptyp_desc = Ppxlib_ast.Ast.Ptyp_constr ({Ppxlib_ast.Ast.txt = Ppxlib_ast.Ast.Lident "unit"; loc = {Ppxlib_ast.Ast.loc_start = {Ppxlib_ast.Ast.pos_fname = "_none_"; pos_lnum = 0; pos_bol = 0; pos_cnum = -1}; loc_end = {Ppxlib_ast.Ast.pos_fname = "_none_"; pos_lnum = 0; pos_bol = 0; pos_cnum = -1}; loc_ghost = true}}, []); ptyp_loc = {Ppxlib_ast.Ast.loc_start = {Ppxlib_ast.Ast.pos_fname = "_none_"; pos_lnum = 0; pos_bol = 0; pos_cnum = -1}; loc_end = {Ppxlib_ast.Ast.pos_fname = "_none_"; pos_lnum = 0; pos_bol = 0; pos_cnum = -1}; loc_ghost = true}; ptyp_loc_stack = []; ptyp_attributes = []} |}] let _ = [%stri let _ = ()] [%%expect{| - : Ppxlib.structure_item = {Ppxlib_ast.Ast.pstr_desc = Ppxlib_ast.Ast.Pstr_value (Ppxlib_ast.Ast.Nonrecursive, [{Ppxlib_ast.Ast.pvb_pat = {Ppxlib_ast.Ast.ppat_desc = Ppxlib_ast.Ast.Ppat_any; ppat_loc = {Ppxlib_ast.Ast.loc_start = {Ppxlib_ast.Ast.pos_fname = "_none_"; pos_lnum = 0; pos_bol = 0; pos_cnum = -1}; loc_end = {Ppxlib_ast.Ast.pos_fname = "_none_"; pos_lnum = 0; pos_bol = 0; pos_cnum = -1}; loc_ghost = true}; ppat_loc_stack = []; ppat_attributes = []}; pvb_expr = {Ppxlib_ast.Ast.pexp_desc = Ppxlib_ast.Ast.Pexp_construct ({Ppxlib_ast.Ast.txt = Ppxlib_ast.Ast.Lident "()"; loc = {Ppxlib_ast.Ast.loc_start = {Ppxlib_ast.Ast.pos_fname = "_none_"; pos_lnum = 0; pos_bol = 0; pos_cnum = -1}; loc_end = {Ppxlib_ast.Ast.pos_fname = "_none_"; pos_lnum = 0; pos_bol = 0; pos_cnum = -1}; loc_ghost = true}}, None); pexp_loc = {Ppxlib_ast.Ast.loc_start = {Ppxlib_ast.Ast.pos_fname = "_none_"; pos_lnum = 0; pos_bol = 0; pos_cnum = -1}; loc_end = {Ppxlib_ast.Ast.pos_fname = "_none_"; pos_lnum = 0; pos_bol = 0; pos_cnum = -1}; loc_ghost = true}; pexp_loc_stack = []; pexp_attributes = []}; pvb_constraint = None; pvb_attributes = []; pvb_loc = {Ppxlib_ast.Ast.loc_start = {Ppxlib_ast.Ast.pos_fname = "_none_"; pos_lnum = 0; pos_bol = 0; pos_cnum = -1}; loc_end = {Ppxlib_ast.Ast.pos_fname = "_none_"; pos_lnum = 0; pos_bol = 0; pos_cnum = -1}; loc_ghost = true}}]); pstr_loc = {Ppxlib_ast.Ast.loc_start = {Ppxlib_ast.Ast.pos_fname = "_none_"; pos_lnum = 0; pos_bol = 0; pos_cnum = -1}; loc_end = {Ppxlib_ast.Ast.pos_fname = "_none_"; pos_lnum = 0; pos_bol = 0; pos_cnum = -1}; loc_ghost = true}} |}] let _ = [%sigi: include S] [%%expect{| - : Ppxlib.signature_item = {Ppxlib_ast.Ast.psig_desc = Ppxlib_ast.Ast.Psig_include {Ppxlib_ast.Ast.pincl_mod = {Ppxlib_ast.Ast.pmty_desc = Ppxlib_ast.Ast.Pmty_ident {Ppxlib_ast.Ast.txt = Ppxlib_ast.Ast.Lident "S"; loc = {Ppxlib_ast.Ast.loc_start = {Ppxlib_ast.Ast.pos_fname = "_none_"; pos_lnum = 0; pos_bol = 0; pos_cnum = -1}; loc_end = {Ppxlib_ast.Ast.pos_fname = "_none_"; pos_lnum = 0; pos_bol = 0; pos_cnum = -1}; loc_ghost = true}}; pmty_loc = {Ppxlib_ast.Ast.loc_start = {Ppxlib_ast.Ast.pos_fname = "_none_"; pos_lnum = 0; pos_bol = 0; pos_cnum = -1}; loc_end = {Ppxlib_ast.Ast.pos_fname = "_none_"; pos_lnum = 0; pos_bol = 0; pos_cnum = -1}; loc_ghost = true}; pmty_attributes = []}; pincl_loc = {Ppxlib_ast.Ast.loc_start = {Ppxlib_ast.Ast.pos_fname = "_none_"; pos_lnum = 0; pos_bol = 0; pos_cnum = -1}; loc_end = {Ppxlib_ast.Ast.pos_fname = "_none_"; pos_lnum = 0; pos_bol = 0; pos_cnum = -1}; loc_ghost = true}; pincl_attributes = []}; psig_loc = {Ppxlib_ast.Ast.loc_start = {Ppxlib_ast.Ast.pos_fname = "_none_"; pos_lnum = 0; pos_bol = 0; pos_cnum = -1}; loc_end = {Ppxlib_ast.Ast.pos_fname = "_none_"; pos_lnum = 0; pos_bol = 0; pos_cnum = -1}; loc_ghost = true}} |}] let _ = [%str let _ = ()] [%%expect{| - : Ppxlib_ast.Ast.structure = [{Ppxlib_ast.Ast.pstr_desc = Ppxlib_ast.Ast.Pstr_value (Ppxlib_ast.Ast.Nonrecursive, [{Ppxlib_ast.Ast.pvb_pat = {Ppxlib_ast.Ast.ppat_desc = Ppxlib_ast.Ast.Ppat_any; ppat_loc = {Ppxlib_ast.Ast.loc_start = {Ppxlib_ast.Ast.pos_fname = "_none_"; pos_lnum = 0; pos_bol = 0; pos_cnum = -1}; loc_end = {Ppxlib_ast.Ast.pos_fname = "_none_"; pos_lnum = 0; pos_bol = 0; pos_cnum = -1}; loc_ghost = true}; ppat_loc_stack = []; ppat_attributes = []}; pvb_expr = {Ppxlib_ast.Ast.pexp_desc = Ppxlib_ast.Ast.Pexp_construct ({Ppxlib_ast.Ast.txt = Ppxlib_ast.Ast.Lident "()"; loc = {Ppxlib_ast.Ast.loc_start = {Ppxlib_ast.Ast.pos_fname = "_none_"; pos_lnum = 0; pos_bol = 0; pos_cnum = -1}; loc_end = {Ppxlib_ast.Ast.pos_fname = "_none_"; pos_lnum = 0; pos_bol = 0; pos_cnum = -1}; loc_ghost = true}}, None); pexp_loc = {Ppxlib_ast.Ast.loc_start = {Ppxlib_ast.Ast.pos_fname = "_none_"; pos_lnum = 0; pos_bol = 0; pos_cnum = -1}; loc_end = {Ppxlib_ast.Ast.pos_fname = "_none_"; pos_lnum = 0; pos_bol = 0; pos_cnum = -1}; loc_ghost = true}; pexp_loc_stack = []; pexp_attributes = []}; pvb_constraint = None; pvb_attributes = []; pvb_loc = {Ppxlib_ast.Ast.loc_start = {Ppxlib_ast.Ast.pos_fname = "_none_"; pos_lnum = 0; pos_bol = 0; pos_cnum = -1}; loc_end = {Ppxlib_ast.Ast.pos_fname = "_none_"; pos_lnum = 0; pos_bol = 0; pos_cnum = -1}; loc_ghost = true}}]); pstr_loc = {Ppxlib_ast.Ast.loc_start = {Ppxlib_ast.Ast.pos_fname = "_none_"; pos_lnum = 0; pos_bol = 0; pos_cnum = -1}; loc_end = {Ppxlib_ast.Ast.pos_fname = "_none_"; pos_lnum = 0; pos_bol = 0; pos_cnum = -1}; loc_ghost = true}}] |}] let _ = [%sig: include S] [%%expect{| - : Ppxlib_ast.Ast.signature = [{Ppxlib_ast.Ast.psig_desc = Ppxlib_ast.Ast.Psig_include {Ppxlib_ast.Ast.pincl_mod = {Ppxlib_ast.Ast.pmty_desc = Ppxlib_ast.Ast.Pmty_ident {Ppxlib_ast.Ast.txt = Ppxlib_ast.Ast.Lident "S"; loc = {Ppxlib_ast.Ast.loc_start = {Ppxlib_ast.Ast.pos_fname = "_none_"; pos_lnum = 0; pos_bol = 0; pos_cnum = -1}; loc_end = {Ppxlib_ast.Ast.pos_fname = "_none_"; pos_lnum = 0; pos_bol = 0; pos_cnum = -1}; loc_ghost = true}}; pmty_loc = {Ppxlib_ast.Ast.loc_start = {Ppxlib_ast.Ast.pos_fname = "_none_"; pos_lnum = 0; pos_bol = 0; pos_cnum = -1}; loc_end = {Ppxlib_ast.Ast.pos_fname = "_none_"; pos_lnum = 0; pos_bol = 0; pos_cnum = -1}; loc_ghost = true}; pmty_attributes = []}; pincl_loc = {Ppxlib_ast.Ast.loc_start = {Ppxlib_ast.Ast.pos_fname = "_none_"; pos_lnum = 0; pos_bol = 0; pos_cnum = -1}; loc_end = {Ppxlib_ast.Ast.pos_fname = "_none_"; pos_lnum = 0; pos_bol = 0; pos_cnum = -1}; loc_ghost = true}; pincl_attributes = []}; psig_loc = {Ppxlib_ast.Ast.loc_start = {Ppxlib_ast.Ast.pos_fname = "_none_"; pos_lnum = 0; pos_bol = 0; pos_cnum = -1}; loc_end = {Ppxlib_ast.Ast.pos_fname = "_none_"; pos_lnum = 0; pos_bol = 0; pos_cnum = -1}; loc_ghost = true}}] |}] (* attributes *) let _ = let e = [%expr (() [@attr1])] in [%expr [%e e] [@attr2]].pexp_attributes [%%expect{| - : Ppxlib_ast.Ast.attributes = [{Ppxlib_ast.Ast.attr_name = {Ppxlib_ast.Ast.txt = "attr1"; loc = {Ppxlib_ast.Ast.loc_start = {Ppxlib_ast.Ast.pos_fname = "_none_"; pos_lnum = 0; pos_bol = 0; pos_cnum = -1}; loc_end = {Ppxlib_ast.Ast.pos_fname = "_none_"; pos_lnum = 0; pos_bol = 0; pos_cnum = -1}; loc_ghost = true}}; attr_payload = Ppxlib_ast.Ast.PStr []; attr_loc = {Ppxlib_ast.Ast.loc_start = {Ppxlib_ast.Ast.pos_fname = "_none_"; pos_lnum = 0; pos_bol = 0; pos_cnum = -1}; loc_end = {Ppxlib_ast.Ast.pos_fname = "_none_"; pos_lnum = 0; pos_bol = 0; pos_cnum = -1}; loc_ghost = true}}; {Ppxlib_ast.Ast.attr_name = {Ppxlib_ast.Ast.txt = "attr2"; loc = {Ppxlib_ast.Ast.loc_start = {Ppxlib_ast.Ast.pos_fname = "_none_"; pos_lnum = 0; pos_bol = 0; pos_cnum = -1}; loc_end = {Ppxlib_ast.Ast.pos_fname = "_none_"; pos_lnum = 0; pos_bol = 0; pos_cnum = -1}; loc_ghost = true}}; attr_payload = Ppxlib_ast.Ast.PStr []; attr_loc = {Ppxlib_ast.Ast.loc_start = {Ppxlib_ast.Ast.pos_fname = "_none_"; pos_lnum = 0; pos_bol = 0; pos_cnum = -1}; loc_end = {Ppxlib_ast.Ast.pos_fname = "_none_"; pos_lnum = 0; pos_bol = 0; pos_cnum = -1}; loc_ghost = true}}] |}] let _ = let p = [%pat? (() [@attr1])] in [%pat? [%p p] [@attr2]].ppat_attributes [%%expect{| - : Ppxlib_ast.Ast.attributes = [{Ppxlib_ast.Ast.attr_name = {Ppxlib_ast.Ast.txt = "attr1"; loc = {Ppxlib_ast.Ast.loc_start = {Ppxlib_ast.Ast.pos_fname = "_none_"; pos_lnum = 0; pos_bol = 0; pos_cnum = -1}; loc_end = {Ppxlib_ast.Ast.pos_fname = "_none_"; pos_lnum = 0; pos_bol = 0; pos_cnum = -1}; loc_ghost = true}}; attr_payload = Ppxlib_ast.Ast.PStr []; attr_loc = {Ppxlib_ast.Ast.loc_start = {Ppxlib_ast.Ast.pos_fname = "_none_"; pos_lnum = 0; pos_bol = 0; pos_cnum = -1}; loc_end = {Ppxlib_ast.Ast.pos_fname = "_none_"; pos_lnum = 0; pos_bol = 0; pos_cnum = -1}; loc_ghost = true}}; {Ppxlib_ast.Ast.attr_name = {Ppxlib_ast.Ast.txt = "attr2"; loc = {Ppxlib_ast.Ast.loc_start = {Ppxlib_ast.Ast.pos_fname = "_none_"; pos_lnum = 0; pos_bol = 0; pos_cnum = -1}; loc_end = {Ppxlib_ast.Ast.pos_fname = "_none_"; pos_lnum = 0; pos_bol = 0; pos_cnum = -1}; loc_ghost = true}}; attr_payload = Ppxlib_ast.Ast.PStr []; attr_loc = {Ppxlib_ast.Ast.loc_start = {Ppxlib_ast.Ast.pos_fname = "_none_"; pos_lnum = 0; pos_bol = 0; pos_cnum = -1}; loc_end = {Ppxlib_ast.Ast.pos_fname = "_none_"; pos_lnum = 0; pos_bol = 0; pos_cnum = -1}; loc_ghost = true}}] |}] let _ = let t = [%type: (unit [@attr1])] in [%type: [%t t] [@attr2]].ptyp_attributes [%%expect{| - : Ppxlib_ast.Ast.attributes = [{Ppxlib_ast.Ast.attr_name = {Ppxlib_ast.Ast.txt = "attr1"; loc = {Ppxlib_ast.Ast.loc_start = {Ppxlib_ast.Ast.pos_fname = "_none_"; pos_lnum = 0; pos_bol = 0; pos_cnum = -1}; loc_end = {Ppxlib_ast.Ast.pos_fname = "_none_"; pos_lnum = 0; pos_bol = 0; pos_cnum = -1}; loc_ghost = true}}; attr_payload = Ppxlib_ast.Ast.PStr []; attr_loc = {Ppxlib_ast.Ast.loc_start = {Ppxlib_ast.Ast.pos_fname = "_none_"; pos_lnum = 0; pos_bol = 0; pos_cnum = -1}; loc_end = {Ppxlib_ast.Ast.pos_fname = "_none_"; pos_lnum = 0; pos_bol = 0; pos_cnum = -1}; loc_ghost = true}}; {Ppxlib_ast.Ast.attr_name = {Ppxlib_ast.Ast.txt = "attr2"; loc = {Ppxlib_ast.Ast.loc_start = {Ppxlib_ast.Ast.pos_fname = "_none_"; pos_lnum = 0; pos_bol = 0; pos_cnum = -1}; loc_end = {Ppxlib_ast.Ast.pos_fname = "_none_"; pos_lnum = 0; pos_bol = 0; pos_cnum = -1}; loc_ghost = true}}; attr_payload = Ppxlib_ast.Ast.PStr []; attr_loc = {Ppxlib_ast.Ast.loc_start = {Ppxlib_ast.Ast.pos_fname = "_none_"; pos_lnum = 0; pos_bol = 0; pos_cnum = -1}; loc_end = {Ppxlib_ast.Ast.pos_fname = "_none_"; pos_lnum = 0; pos_bol = 0; pos_cnum = -1}; loc_ghost = true}}] |}] let _ = let extract_module_M m = match m with | [%stri module M = [%m? m]] -> m | _ -> assert false in let m = extract_module_M [%stri module M = (struct end [@attr1])] in (extract_module_M [%stri module M = [%m m] [@attr2]]).pmod_attributes [%%expect{| - : Ppxlib_ast.Ast.attributes = [{Ppxlib_ast.Ast.attr_name = {Ppxlib_ast.Ast.txt = "attr1"; loc = {Ppxlib_ast.Ast.loc_start = {Ppxlib_ast.Ast.pos_fname = "_none_"; pos_lnum = 0; pos_bol = 0; pos_cnum = -1}; loc_end = {Ppxlib_ast.Ast.pos_fname = "_none_"; pos_lnum = 0; pos_bol = 0; pos_cnum = -1}; loc_ghost = true}}; attr_payload = Ppxlib_ast.Ast.PStr []; attr_loc = {Ppxlib_ast.Ast.loc_start = {Ppxlib_ast.Ast.pos_fname = "_none_"; pos_lnum = 0; pos_bol = 0; pos_cnum = -1}; loc_end = {Ppxlib_ast.Ast.pos_fname = "_none_"; pos_lnum = 0; pos_bol = 0; pos_cnum = -1}; loc_ghost = true}}; {Ppxlib_ast.Ast.attr_name = {Ppxlib_ast.Ast.txt = "attr2"; loc = {Ppxlib_ast.Ast.loc_start = {Ppxlib_ast.Ast.pos_fname = "_none_"; pos_lnum = 0; pos_bol = 0; pos_cnum = -1}; loc_end = {Ppxlib_ast.Ast.pos_fname = "_none_"; pos_lnum = 0; pos_bol = 0; pos_cnum = -1}; loc_ghost = true}}; attr_payload = Ppxlib_ast.Ast.PStr []; attr_loc = {Ppxlib_ast.Ast.loc_start = {Ppxlib_ast.Ast.pos_fname = "_none_"; pos_lnum = 0; pos_bol = 0; pos_cnum = -1}; loc_end = {Ppxlib_ast.Ast.pos_fname = "_none_"; pos_lnum = 0; pos_bol = 0; pos_cnum = -1}; loc_ghost = true}}] |}] let _ = let extract_module_ty_S s = match s with | [%stri module type S = [%m? s]] -> s | _ -> assert false in let s = extract_module_ty_S [%stri module type S = (sig end [@attr1])] in (extract_module_ty_S [%stri module type S = [%m s] [@attr2]]).pmty_attributes [%%expect{| - : Ppxlib_ast.Ast.attributes = [{Ppxlib_ast.Ast.attr_name = {Ppxlib_ast.Ast.txt = "attr1"; loc = {Ppxlib_ast.Ast.loc_start = {Ppxlib_ast.Ast.pos_fname = "_none_"; pos_lnum = 0; pos_bol = 0; pos_cnum = -1}; loc_end = {Ppxlib_ast.Ast.pos_fname = "_none_"; pos_lnum = 0; pos_bol = 0; pos_cnum = -1}; loc_ghost = true}}; attr_payload = Ppxlib_ast.Ast.PStr []; attr_loc = {Ppxlib_ast.Ast.loc_start = {Ppxlib_ast.Ast.pos_fname = "_none_"; pos_lnum = 0; pos_bol = 0; pos_cnum = -1}; loc_end = {Ppxlib_ast.Ast.pos_fname = "_none_"; pos_lnum = 0; pos_bol = 0; pos_cnum = -1}; loc_ghost = true}}; {Ppxlib_ast.Ast.attr_name = {Ppxlib_ast.Ast.txt = "attr2"; loc = {Ppxlib_ast.Ast.loc_start = {Ppxlib_ast.Ast.pos_fname = "_none_"; pos_lnum = 0; pos_bol = 0; pos_cnum = -1}; loc_end = {Ppxlib_ast.Ast.pos_fname = "_none_"; pos_lnum = 0; pos_bol = 0; pos_cnum = -1}; loc_ghost = true}}; attr_payload = Ppxlib_ast.Ast.PStr []; attr_loc = {Ppxlib_ast.Ast.loc_start = {Ppxlib_ast.Ast.pos_fname = "_none_"; pos_lnum = 0; pos_bol = 0; pos_cnum = -1}; loc_end = {Ppxlib_ast.Ast.pos_fname = "_none_"; pos_lnum = 0; pos_bol = 0; pos_cnum = -1}; loc_ghost = true}}] |}] (* mistyped escapes (not producing ASTs at all) *) let _ = [%expr [%e ()]] [%%expect_in <= 5.2 {| Line _, characters 19-21: Error: This expression should not be a unit literal, the expected type is Ppxlib_ast.Ast.expression |}] [%%expect_in >= 5.3 {| Line _, characters 19-21: Error: This expression should not be a unit literal, the expected type is Ppxlib.expression |}] let _ = [%pat? [%p ()]] [%%expect_in <= 5.2 {| Line _, characters 19-21: Error: This expression should not be a unit literal, the expected type is Ppxlib_ast.Ast.pattern |}] [%%expect_in >= 5.3 {| Line _, characters 19-21: Error: This expression should not be a unit literal, the expected type is Ppxlib.pattern |}] let _ = [%type: [%t ()]] [%%expect_in <= 5.2 {| Line _, characters 20-22: Error: This expression should not be a unit literal, the expected type is Ppxlib_ast.Ast.core_type |}] [%%expect_in >= 5.3 {| Line _, characters 20-22: Error: This expression should not be a unit literal, the expected type is Ppxlib.core_type |}] let _ = [%stri [%%i ()]] [%%expect_in <= 5.2 {| Line _, characters 20-22: Error: This expression should not be a unit literal, the expected type is Ppxlib_ast.Ast.structure_item |}] [%%expect_in >= 5.3 {| Line _, characters 20-22: Error: This expression should not be a unit literal, the expected type is Ppxlib.structure_item |}] let _ = [%sigi: [%%i ()]] [%%expect_in <= 5.2 {| Line _, characters 21-23: Error: This expression should not be a unit literal, the expected type is Ppxlib_ast.Ast.signature_item |}] [%%expect_in >= 5.3 {| Line _, characters 21-23: Error: This expression should not be a unit literal, the expected type is Ppxlib.signature_item |}] (* mistyped escapes (not producing ASTs at all) with attributes *) let _ = [%expr [%e ()] [@attr]] [%%expect_in <= 5.2 {| Line _, characters 19-21: Error: This expression should not be a unit literal, the expected type is Ppxlib_ast.Ast.expression |}] [%%expect_in >= 5.3 {| Line _, characters 19-21: Error: This expression should not be a unit literal, the expected type is Ppxlib.expression |}] let _ = [%pat? [%p ()] [@attr]] [%%expect_in <= 5.2 {| Line _, characters 19-21: Error: This expression should not be a unit literal, the expected type is Ppxlib_ast.Ast.pattern |}] [%%expect_in >= 5.3 {| Line _, characters 19-21: Error: This expression should not be a unit literal, the expected type is Ppxlib.pattern |}] let _ = [%type: [%t ()] [@attr]] [%%expect_in <= 5.2 {| Line _, characters 20-22: Error: This expression should not be a unit literal, the expected type is Ppxlib_ast.Ast.core_type |}] [%%expect_in >= 5.3 {| Line _, characters 20-22: Error: This expression should not be a unit literal, the expected type is Ppxlib.core_type |}] let _ = [%stri module M = [%m ()] [@attr]] [%%expect_in <= 5.2 {| Line _, characters 30-32: Error: This expression should not be a unit literal, the expected type is Ppxlib_ast.Ast.module_expr |}] [%%expect_in >= 5.3 {| Line _, characters 30-32: Error: This expression should not be a unit literal, the expected type is Ppxlib.module_expr |}] let _ = [%sigi: module type M = [%m ()] [@attr]] [%%expect_in <= 5.2 {| Line _, characters 36-38: Error: This expression should not be a unit literal, the expected type is Ppxlib_ast.Ast.module_type |}] [%%expect_in >= 5.3 {| Line _, characters 36-38: Error: This expression should not be a unit literal, the expected type is Ppxlib.module_type |}] (* Coalescing arguments from [fun x -> fun y -> fun z -> ...] to [fun x y z -> ...] *) let _ = let e = [%expr fun z -> x + y + z] in let f = [%expr fun y -> [%e e]] in let func = [%expr fun x -> [%e f]] in Format.asprintf "%a" Astlib.Pprintast.expression func [%%expect{| - : string = "fun x y z -> (x + y) + z" |}]