diff options
author | Camil Staps | 2021-01-04 20:25:07 +0100 |
---|---|---|
committer | Camil Staps | 2021-01-04 20:25:07 +0100 |
commit | 6084502fd84a6f427429966456a97c14691fc10d (patch) | |
tree | 811d9ee0f7873b072f5c92e5221c913c33d45cb7 /ABC/Assembler.icl | |
parent | Add note about when not to use this library (diff) |
Diffstat (limited to 'ABC/Assembler.icl')
-rw-r--r-- | ABC/Assembler.icl | 32 |
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) |