equal
deleted
inserted
replaced
85 datatype state = State of (node * (node -> unit)) list; |
85 datatype state = State of (node * (node -> unit)) list; |
86 |
86 |
87 exception UNDEF; |
87 exception UNDEF; |
88 |
88 |
89 val toplevel = State []; |
89 val toplevel = State []; |
|
90 fun append_states (State ns) (State ms) = State (ns @ ms); |
90 |
91 |
91 fun print_state (State []) = () |
92 fun print_state (State []) = () |
92 | print_state (State [(node, _)]) = print_node node |
93 | print_state (State [(node, _)]) = print_node node |
93 | print_state (State ((node, _) :: nodes)) = |
94 | print_state (State ((node, _) :: nodes)) = |
94 (writeln ("Stack size: " ^ string_of_int (length nodes)); print_node node); |
95 (writeln ("Stack size: " ^ string_of_int (length nodes)); print_node node); |
299 |
300 |
300 fun apply int tr state = |
301 fun apply int tr state = |
301 Some (transform_interrupt_state (transform_error (app int tr)) state, None) |
302 Some (transform_interrupt_state (transform_error (app int tr)) state, None) |
302 handle |
303 handle |
303 TERMINATE => None |
304 TERMINATE => None |
|
305 | FAIL (exn_info as (BREAK break_state, _)) => |
|
306 Some (append_states break_state state, Some exn_info) |
304 | FAIL exn_info => Some (state, Some exn_info) |
307 | FAIL exn_info => Some (state, Some exn_info) |
305 | PureThy.ROLLBACK (copy_thy, opt_exn) => |
308 | PureThy.ROLLBACK (copy_thy, opt_exn) => |
306 Some (rollback tr copy_thy state, apsome (fn exn => (exn, at_command tr)) opt_exn) |
309 Some (rollback tr copy_thy state, apsome (fn exn => (exn, at_command tr)) opt_exn) |
307 | exn as BREAK break_state => Some (break_state, Some (exn, at_command tr)) |
|
308 | exn => Some (state, Some (exn, at_command tr)); |
310 | exn => Some (state, Some (exn, at_command tr)); |
309 |
311 |
310 |
312 |
311 (* excursion: toplevel -- apply transformers -- toplevel *) |
313 (* excursion: toplevel -- apply transformers -- toplevel *) |
312 |
314 |