equal
deleted
inserted
replaced
71 (fn _ => fn src => fn ctxt => |
71 (fn _ => fn src => fn ctxt => |
72 let |
72 let |
73 val (s, _) = Token.syntax (Scan.lift Args.embedded_input) src ctxt; |
73 val (s, _) = Token.syntax (Scan.lift Args.embedded_input) src ctxt; |
74 val tokenize = ML_Lex.tokenize_range Position.no_range; |
74 val tokenize = ML_Lex.tokenize_range Position.no_range; |
75 val tokenize_range = ML_Lex.tokenize_range (Input.range_of s); |
75 val tokenize_range = ML_Lex.tokenize_range (Input.range_of s); |
76 fun decl (_: Proof.context) = |
76 |
|
77 val (decl, ctxt') = ML_Context.expand_antiquotes (ML_Lex.read_source s) ctxt; |
|
78 fun decl' ctxt'' = |
77 let |
79 let |
78 val expr = ML_Lex.read_source s |> map Antiquote.the_text; |
80 val (ml_env, ml_body) = decl ctxt''; |
79 val ml = |
81 val ml_body' = |
80 tokenize "let val expr = (fn () => " @ expr @ tokenize ");" @ |
82 tokenize "let val expr = (fn () => " @ ml_body @ tokenize ");" @ |
81 tokenize " val " @ tokenize_range "result" @ |
83 tokenize " val " @ tokenize_range "result" @ |
82 tokenize (" = " ^ operator ^ " expr; in result end") |
84 tokenize (" = " ^ operator ^ " expr; in result end"); |
83 in ([], ml) end; |
85 in (ml_env, ml_body') end; |
84 in (decl, ctxt) end); |
86 in (decl', ctxt') end); |
85 |
87 |
86 |
88 |
87 (* basic antiquotations *) |
89 (* basic antiquotations *) |
88 |
90 |
89 val _ = Theory.setup |
91 val _ = Theory.setup |