diff options
| author | aarne <unknown> | 2004-12-20 07:57:05 +0000 |
|---|---|---|
| committer | aarne <unknown> | 2004-12-20 07:57:05 +0000 |
| commit | 6e1f41b26af8154033fda32c573aba56d7cb89fb (patch) | |
| tree | cdfd17dd3a1444f3a921cadc6d0a141178767819 /examples/gfcc/ImperJVM.gf | |
| parent | 8caa3ed737900c0fc004b24720f909244d17dd59 (diff) | |
gfcc in Types
Diffstat (limited to 'examples/gfcc/ImperJVM.gf')
| -rw-r--r-- | examples/gfcc/ImperJVM.gf | 28 |
1 files changed, 14 insertions, 14 deletions
diff --git a/examples/gfcc/ImperJVM.gf b/examples/gfcc/ImperJVM.gf index 5b2009e32..43fc98e6f 100644 --- a/examples/gfcc/ImperJVM.gf +++ b/examples/gfcc/ImperJVM.gf @@ -5,6 +5,7 @@ flags lexer=codevars ; unlexer=code ; startcat=Stm ; lincat Rec = {s,s2,s3 : Str} ; -- code, storage for locals, continuation + Typ = {s : Str ; t : TypIdent} ; Stm = Instr ; lin @@ -36,7 +37,7 @@ flags lexer=codevars ; unlexer=code ; startcat=Stm ; Decl typ cont = instrb typ.s ( ["alloc"] ++ typ.s ++ cont.$0 ) cont ; - Assign t x exp = instrc (exp.s ++ t.s ++ "_store" ++ x.s) ; + Assign t x exp = instrc (exp.s ++ typInstr "store" t.t ++ x.s) ; While exp loop = let test = "TEST_" ++ loop.s2 ; @@ -62,30 +63,29 @@ flags lexer=codevars ; unlexer=code ; startcat=Stm ; f.s ++ "label" ++ true ) ; - Block stm = instrc stm.s ; - Printf t e = instrc (e.s ++ "invokestatic" ++ t.s ++ "runtime/printf" ++ paren (t.s) ++ "v") ; - Return t exp = instr (exp.s ++ t.s ++ "_return") ; + Block stm = instrc stm.s ; + Printf t e = instrc (e.s ++ "runtime" ++ typInstr "printf" t.t ++ paren (t.s) ++ "V") ; + Return t exp = instr (exp.s ++ typInstr "return" t.t) ; Returnv = instr "return" ; End = ss [] ** {s2,s3 = []} ; - EVar t x = instr (t.s ++ "_load" ++ x.s) ; + EVar t x = instr (typInstr "load" t.t ++ x.s) ; EInt n = instr ("ldc" ++ n.s) ; EFloat a b = instr ("ldc" ++ a.s ++ "." ++ b.s) ; - EAdd = binopt "_add" ; - ESub = binopt "_sub" ; - EMul = binopt "_mul" ; - ELt t = binop ("invokestatic" ++ t.s ++ "runtime/lt" ++ paren (t.s ++ t.s) ++ "i") ; + EAdd t _ = binopt "add" t.t ; + ESub t _ = binopt "sub" t.t ; + EMul t _ = binopt "mul" t.t ; + ELt t _ = binop ("runtime" ++ typInstr "lt" t.t ++ paren (t.s ++ t.s) ++ "I") ; EAppNil val f = instr ( - "invokestatic" ++ f.s ++ paren [] ++ val.s + "static" ++ f.s ++ paren [] ++ val.s ) ; EApp args val f exps = instr ( exps.s ++ - "invokestatic" ++ f.s ++ paren args.s ++ val.s + "static" ++ f.s ++ paren args.s ++ val.s ) ; - TNum t = t ; - TInt = ss "i" ; - TFloat = ss "f" ; + TInt = {s = "I" ; t = TIInt} ; + TFloat = {s = "F" ; t = TIFloat} ; NilTyp = ss [] ; ConsTyp = cc2 ; OneExp _ e = e ; |
