1 ! Copyright (C) 2010 Slava Pestov.
2 USING: accessors continuations debugger euler.b-rep gml.parser
3 gml.printer gml.runtime io io.encodings.utf8 io.files kernel
7 TUPLE: gml-file-error pathname error ;
9 C: <gml-file-error> gml-file-error
11 M: gml-file-error error.
12 "Error in GML file “" write
13 dup pathname>> write "”:" print nl
16 : gml-stack. ( gml -- )
18 "Operand stack:" print
19 [ "• " write print-gml ] each
24 : make-gml ( quot -- gml b-rep )
30 b-rep get dup finish-b-rep
33 : with-gml ( gml b-rep quot -- )
41 : run-gml-string ( string -- )
42 [ gml get ] dip parse-gml exec drop ;
44 : run-gml-file ( pathname -- )
45 [ utf8 file-contents run-gml-string ]
46 [ <gml-file-error> rethrow ]
49 SYMBOLS: pre-hook post-hook ;
51 [ ] pre-hook set-global
52 [ ] post-hook set-global
54 : (gml-listener) ( -- )
55 "GML> " write flush readln [
57 pre-hook get call( -- )
59 post-hook get call( -- )
61 [ gml get gml-stack. ] try
66 [ (gml-listener) ] make-gml 2drop ;