equal
  deleted
  inserted
  replaced
  
    
    
|     45     iload 0 |     45     iload 0 | 
|     46     invokevirtual java/io/PrintStream/println(I)V  |     46     invokevirtual java/io/PrintStream/println(I)V  | 
|     47     return  |     47     return  | 
|     48 .end method |     48 .end method | 
|     49  |     49  | 
|     50 .method public static read()I  |         | 
|     51     .limit locals 10  |         | 
|     52     .limit stack 10 |         | 
|     53  |         | 
|     54     ldc 0  |         | 
|     55     istore 1  ; this will hold our final integer  |         | 
|     56 Label1:  |         | 
|     57     getstatic java/lang/System/in Ljava/io/InputStream;  |         | 
|     58     invokevirtual java/io/InputStream/read()I  |         | 
|     59     istore 2  |         | 
|     60     iload 2  |         | 
|     61     ldc 10   ; the newline delimiter  |         | 
|     62     isub  |         | 
|     63     ifeq Label2  |         | 
|     64     iload 2  |         | 
|     65     ldc 32   ; the space delimiter  |         | 
|     66     isub  |         | 
|     67     ifeq Label2 |         | 
|     68  |         | 
|     69     iload 2  |         | 
|     70     ldc 48   ; we have our digit in ASCII, have to subtract it from 48  |         | 
|     71     isub  |         | 
|     72     ldc 10  |         | 
|     73     iload 1  |         | 
|     74     imul  |         | 
|     75     iadd  |         | 
|     76     istore 1  |         | 
|     77     goto Label1  |         | 
|     78 Label2:  |         | 
|     79     ;when we come here we have our integer computed in local variable 1  |         | 
|     80     iload 1  |         | 
|     81     ireturn  |         | 
|     82 .end method |         | 
|     83  |         | 
|     84 .method public static main([Ljava/lang/String;)V |     50 .method public static main([Ljava/lang/String;)V | 
|     85    .limit locals 200 |     51    .limit locals 200 | 
|     86    .limit stack 200 |     52    .limit stack 200 | 
|     87  |     53  | 
|     88 ; COMPILED CODE STARTS |     54 ; COMPILED CODE STARTS | 
|    116     def i(args: Any*): String = "   " ++ sc.s(args:_*) ++ "\n" |     82     def i(args: Any*): String = "   " ++ sc.s(args:_*) ++ "\n" | 
|    117     def l(args: Any*): String = sc.s(args:_*) ++ ":\n" |     83     def l(args: Any*): String = sc.s(args:_*) ++ ":\n" | 
|    118 } |     84 } | 
|    119  |     85  | 
|    120 // this allows us to write things like |     86 // this allows us to write things like | 
|    121 // i"add" and l"Label" |     87 // i"iadd" and l"Label" | 
|    122  |     88  | 
|    123  |     89  | 
|    124 // environments  |     90 // environments  | 
|    125 type Env = Map[String, Int] |     91 type Env = Map[String, Int] | 
|    126  |     92  | 
|    136   case Num(i) => i"ldc $i" |    102   case Num(i) => i"ldc $i" | 
|    137   case Var(s) => i"iload ${env(s)} \t\t; $s" |    103   case Var(s) => i"iload ${env(s)} \t\t; $s" | 
|    138   case Aop(op, a1, a2) =>  |    104   case Aop(op, a1, a2) =>  | 
|    139     compile_aexp(a1, env) ++ compile_aexp(a2, env) ++ compile_op(op) |    105     compile_aexp(a1, env) ++ compile_aexp(a2, env) ++ compile_op(op) | 
|    140 } |    106 } | 
|         |    107  | 
|    141  |    108  | 
|    142 // boolean expression compilation |    109 // boolean expression compilation | 
|    143 //  - the jump-label is for where to jump if the condition is not true |    110 //  - the jump-label is for where to jump if the condition is not true | 
|    144 def compile_bexp(b: BExp, env : Env, jmp: String) : String = b match { |    111 def compile_bexp(b: BExp, env : Env, jmp: String) : String = b match { | 
|    145   case True => "" |    112   case True => "" | 
|    254 } |    221 } | 
|    255  |    222  | 
|    256 @main |    223 @main | 
|    257 def test2() = |    224 def test2() = | 
|    258   run(fib_test, "fib") |    225   run(fib_test, "fib") | 
|         |    226  | 
|         |    227  | 
|         |    228  | 
|         |    229  | 
|         |    230  | 
|         |    231  | 
|         |    232 /* Jasmin code for reading an integer | 
|         |    233  | 
|         |    234 .method public static read()I  | 
|         |    235     .limit locals 10  | 
|         |    236     .limit stack 10 | 
|         |    237  | 
|         |    238     ldc 0  | 
|         |    239     istore 1  ; this will hold our final integer  | 
|         |    240 Label1:  | 
|         |    241     getstatic java/lang/System/in Ljava/io/InputStream;  | 
|         |    242     invokevirtual java/io/InputStream/read()I  | 
|         |    243     istore 2  | 
|         |    244     iload 2  | 
|         |    245     ldc 10   ; the newline delimiter  | 
|         |    246     isub  | 
|         |    247     ifeq Label2  | 
|         |    248     iload 2  | 
|         |    249     ldc 32   ; the space delimiter  | 
|         |    250     isub  | 
|         |    251     ifeq Label2 | 
|         |    252  | 
|         |    253     iload 2  | 
|         |    254     ldc 48   ; we have our digit in ASCII, have to subtract it from 48  | 
|         |    255     isub  | 
|         |    256     ldc 10  | 
|         |    257     iload 1  | 
|         |    258     imul  | 
|         |    259     iadd  | 
|         |    260     istore 1  | 
|         |    261     goto Label1  | 
|         |    262 Label2:  | 
|         |    263     ;when we come here we have our integer computed in local variable 1  | 
|         |    264     iload 1  | 
|         |    265     ireturn  | 
|         |    266 .end method | 
|         |    267  | 
|         |    268 */ |