aboutsummaryrefslogtreecommitdiff
path: root/ABC
diff options
context:
space:
mode:
Diffstat (limited to 'ABC')
-rw-r--r--ABC/Assembler.dcl4
-rw-r--r--ABC/Assembler.icl32
-rw-r--r--ABC/Machine/IO.dcl2
-rw-r--r--ABC/Machine/IO.icl10
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