diff options
Diffstat (limited to 'ABC')
-rw-r--r-- | ABC/Assembler.dcl | 4 | ||||
-rw-r--r-- | ABC/Assembler.icl | 32 | ||||
-rw-r--r-- | ABC/Machine/IO.dcl | 2 | ||||
-rw-r--r-- | ABC/Machine/IO.icl | 10 |
4 files changed, 23 insertions, 25 deletions
diff --git a/ABC/Assembler.dcl b/ABC/Assembler.dcl index 1203248..20256c2 100644 --- a/ABC/Assembler.dcl +++ b/ABC/Assembler.dcl @@ -94,10 +94,10 @@ from ABC.Machine.GraphStore import ::Desc | Annotation Annotation | Raw String -instance toString Assembler +showAssembler :: !Assembler -> String instance toString Statement -instance <<< Assembler +printAssembler :: !Assembler !*File -> *File instance <<< Statement assemble :: Assembler -> ([Instruction], [Desc]) diff --git a/ABC/Assembler.icl b/ABC/Assembler.icl index c0a6546..ab4787d 100644 --- a/ABC/Assembler.icl +++ b/ABC/Assembler.icl @@ -6,23 +6,21 @@ import StdGeneric import ABC.Machine import ABC.Misc -instance toString Assembler -where - toString [] = "" - toString [stm=:(Label l):r] = stm <+ "\r\n" <+ r - toString [stm=:(Descriptor _ _ _ _):r] = toString r - toString [stm :r] = "\t" <+ stm <+ "\r\n" <+ r - -instance <<< Assembler -where - <<< f [ ] = f - <<< f [stm=:(Label l) :r] = f <<< ".export " <<< l <<< "\r\n" <<< stm <<< "\r\n" <<< r - <<< f [stm=:(Descriptor _ _ _ _):r] = f <<< r - <<< f [stm=:(Annotation _) :r] = f <<< stm <<< "\r\n" <<< r - <<< f [stm=:(Raw _) :r] = f <<< stm <<< "\r\n" <<< r - <<< f [stm :r] = f <<< "\t" <<< stm <<< "\r\n" <<< r - -instance <<< Statement where <<< f st = f <<< toString st +showAssembler :: !Assembler -> String +showAssembler [] = "" +showAssembler [stm=:(Label l):r] = stm <+ "\r\n" <+ showAssembler r +showAssembler [stm=:(Descriptor _ _ _ _):r] = showAssembler r +showAssembler [stm :r] = "\t" <+ stm <+ "\r\n" <+ showAssembler r + +printAssembler :: !Assembler !*File -> *File +printAssembler [ ] f = f +printAssembler [stm=:(Label l) :r] f = printAssembler r (f <<< ".export " <<< l <<< "\r\n" <<< stm <<< "\r\n") +printAssembler [stm=:(Descriptor _ _ _ _):r] f = printAssembler r f +printAssembler [stm=:(Annotation _) :r] f = printAssembler r (f <<< stm <<< "\r\n") +printAssembler [stm=:(Raw _) :r] f = printAssembler r (f <<< stm <<< "\r\n") +printAssembler [stm :r] f = printAssembler r (f <<< "\t" <<< stm <<< "\r\n") + +instance <<< Statement where (<<<) f st = f <<< toString st generic gPrint a :: !a -> [Char] gPrint{|Int|} x = fromString (toString x) diff --git a/ABC/Machine/IO.dcl b/ABC/Machine/IO.dcl index a9b1c5b..0e653df 100644 --- a/ABC/Machine/IO.dcl +++ b/ABC/Machine/IO.dcl @@ -6,7 +6,7 @@ from ABC.Machine.Nodes import ::Node from ABC.Machine.GraphStore import ::Desc from ABC.Machine.Def import ::State -:: IO (:== [Char]) +:: IO (=: IO [Char]) instance toString IO diff --git a/ABC/Machine/IO.icl b/ABC/Machine/IO.icl index aac5ba7..1169c6b 100644 --- a/ABC/Machine/IO.icl +++ b/ABC/Machine/IO.icl @@ -5,15 +5,15 @@ import StdEnv import ABC.Machine import ABC.Misc -:: IO :== [Char] +:: IO =: IO [Char] -instance toString IO where toString io = {c \\ c <- io} +instance toString IO where toString (IO io) = {c \\ c <- io} -io_init :: IO -io_init = [] +io_init :: IO +io_init = IO [] io_print :: a IO -> IO | toString a -io_print x io = io ++ fromString (toString x) +io_print x (IO io) = IO (io ++ fromString (toString x)) show_node :: Node Desc -> String show_node (Basic _ _ b) _ = toString b |