src/Pure/ML/ml_antiquotation.ML
changeset 73551 53c148e39819
parent 73550 2f6855142a8c
child 73586 76d0b6597c91
equal deleted inserted replaced
73550:2f6855142a8c 73551:53c148e39819
    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