1 ! Copyright (C) 2010 Slava Pestov.
2 USING: accessors continuations debugger fry io io.encodings.utf8
3 io.files kernel namespaces sequences euler.b-rep euler.operators
4 gml.core gml.coremath gml.b-rep gml.geometry gml.modeling
5 gml.parser gml.printer gml.runtime gml.viewer ;
8 TUPLE: gml-file-error pathname error ;
10 C: <gml-file-error> gml-file-error
12 M: gml-file-error error.
13 "Error in GML file “" write
14 dup pathname>> write "”:" print nl
17 : gml-stack. ( gml -- )
19 "Operand stack:" print
20 [ "• " write print-gml ] each
25 : make-gml ( quot -- gml b-rep )
31 b-rep get dup finish-b-rep
34 : with-gml ( gml b-rep quot -- )
42 : run-gml-string ( string -- )
43 [ gml get ] dip parse-gml exec drop ;
45 : run-gml-file ( pathname -- )
46 [ utf8 file-contents run-gml-string ]
47 [ <gml-file-error> rethrow ]
50 SYMBOLS: pre-hook post-hook ;
52 [ ] pre-hook set-global
53 [ ] post-hook set-global
55 : (gml-listener) ( -- )
56 "GML> " write flush readln [
58 pre-hook get call( -- )
60 post-hook get call( -- )
62 [ gml get gml-stack. ] try
67 [ (gml-listener) ] make-gml 2drop ;