aboutsummaryrefslogtreecommitdiff
path: root/ABC/Assembler.icl
diff options
context:
space:
mode:
authorCamil Staps2021-01-04 20:25:07 +0100
committerCamil Staps2021-01-04 20:25:07 +0100
commit6084502fd84a6f427429966456a97c14691fc10d (patch)
tree811d9ee0f7873b072f5c92e5221c913c33d45cb7 /ABC/Assembler.icl
parentAdd note about when not to use this library (diff)
Make up to dateHEADmaster
Diffstat (limited to 'ABC/Assembler.icl')
-rw-r--r--ABC/Assembler.icl32
1 files changed, 15 insertions, 17 deletions
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)