icode: remove method information in IAbort
[nit.git] / src / icode / icode_builder.nit
index aee4d01..ac9a9d5 100644 (file)
@@ -48,7 +48,7 @@ class ICodeBuilder
        # Check that the reciever e is not null (IIs + IAbort)
        fun add_null_reciever_check(e: IRegister)
        do
-               var nul = new_register(module.type_none)
+               var nul = lit_null_reg
                var c = expr(new IIs(e, nul), module.type_bool)
                var iif = new IIf(c)
                stmt(iif)
@@ -94,7 +94,7 @@ class ICodeBuilder
        # Add a localized IAbort
        fun add_abort(s: String...)
        do
-               stmt(new IAbort(s, method, module))
+               stmt(new IAbort(s, module))
        end
 
        # Add an assigment to the iroutine return value
@@ -135,12 +135,12 @@ class ICodeBuilder
                        seq = iif.else_seq
                        # Do the "x != null" part iff x is nullable
                        if args[0].stype.is_nullable then
-                               var nul = new_register(module.type_none)
+                               var nul = lit_null_reg
                                cond = expr(new IIs(args[0], nul), module.type_bool)
                                iif = new IIf(cond)
                                stmt(iif)
                                seq = iif.then_seq
-                               add_assignment(reg, expr(new INative("TAG_Bool(false)", null), module.type_bool))
+                               add_assignment(reg, lit_false_reg)
                                seq = iif.else_seq
                        end
                        # "x.==(y)"
@@ -159,6 +159,28 @@ class ICodeBuilder
                end
        end
 
+       # Return a literal "null" value
+       fun lit_null_reg: IRegister
+       do
+               return new_register(module.type_none)
+       end
+
+       # Return a literal "true" value
+       fun lit_true_reg: IRegister
+       do
+               var e = new INative("TAG_Bool(true)", null)
+               e.is_pure = true
+               return expr(e, module.type_bool)
+       end
+
+       # Return a literal "false" value
+       fun lit_false_reg: IRegister
+       do
+               var e = new INative("TAG_Bool(false)", null)
+               e.is_pure = true
+               return expr(e, module.type_bool)
+       end
+
        # Get a new register
        fun new_register(s: MMType): IRegister
        do