src/Pure/Isar/method.ML
changeset 59909 fbf4d5ad500d
parent 59907 6c0f62490699
child 59914 d1ddcd8df4e4
equal deleted inserted replaced
59908:fdf6957f8635 59909:fbf4d5ad500d
    63   val local_setup: binding -> (Proof.context -> method) context_parser -> string ->
    63   val local_setup: binding -> (Proof.context -> method) context_parser -> string ->
    64     local_theory -> local_theory
    64     local_theory -> local_theory
    65   val method_setup: bstring * Position.T -> Input.source -> string -> local_theory -> local_theory
    65   val method_setup: bstring * Position.T -> Input.source -> string -> local_theory -> local_theory
    66   val method: Proof.context -> Token.src -> Proof.context -> method
    66   val method: Proof.context -> Token.src -> Proof.context -> method
    67   val method_closure: Proof.context -> Token.src -> Token.src
    67   val method_closure: Proof.context -> Token.src -> Token.src
       
    68   val closure: bool Config.T
    68   val method_cmd: Proof.context -> Token.src -> Proof.context -> method
    69   val method_cmd: Proof.context -> Token.src -> Proof.context -> method
    69   val evaluate: text -> Proof.context -> method
    70   val evaluate: text -> Proof.context -> method
    70   type modifier = {init: Proof.context -> Proof.context, attribute: attribute, pos: Position.T}
    71   type modifier = {init: Proof.context -> Proof.context, attribute: attribute, pos: Position.T}
    71   val modifier: attribute -> Position.T -> modifier
    72   val modifier: attribute -> Position.T -> modifier
    72   val section: modifier parser list -> declaration context_parser
    73   val section: modifier parser list -> declaration context_parser
   393 
   394 
   394 fun method ctxt =
   395 fun method ctxt =
   395   let val table = get_methods (Context.Proof ctxt)
   396   let val table = get_methods (Context.Proof ctxt)
   396   in fn src => #1 (Name_Space.get table (#1 (Token.name_of_src src))) src end;
   397   in fn src => #1 (Name_Space.get table (#1 (Token.name_of_src src))) src end;
   397 
   398 
   398 fun method_closure ctxt0 src0 =
   399 fun method_closure ctxt src =
   399   let
   400   let
   400     val src1 = check_src ctxt0 src0;
   401     val src' = Token.init_assignable_src src;
   401     val src2 = Token.init_assignable_src src1;
   402     val ctxt' = Context_Position.not_really ctxt;
   402     val ctxt = Context_Position.not_really ctxt0;
   403     val _ = Seq.pull (method ctxt' src' ctxt' [] (Goal.protect 0 Drule.dummy_thm));
   403     val _ = Seq.pull (method ctxt src2 ctxt [] (Goal.protect 0 Drule.dummy_thm));
   404   in Token.closure_src src' end;
   404   in Token.closure_src src2 end;
   405 
   405 
   406 val closure = Config.bool (Config.declare ("Method.closure", @{here}) (K (Config.Bool true)));
   406 fun method_cmd ctxt = method ctxt o method_closure ctxt;
   407 
       
   408 fun method_cmd ctxt =
       
   409   check_src ctxt #>
       
   410   Config.get ctxt closure ? method_closure ctxt #>
       
   411   method ctxt;
   407 
   412 
   408 
   413 
   409 (* evaluate method text *)
   414 (* evaluate method text *)
   410 
   415 
   411 local
   416 local