nitc: support for native_arg[cv] as intern
[nit.git] / src / compiling / compiling_icode.nit
index 169d411..ccccb08 100644 (file)
@@ -267,7 +267,9 @@ redef class IRoutine
                else
                        p = cparams.join(", ")
                end
-               if human_name != null then v.add_decl("static const char * const LOCATE_{cname} = \"{human_name}\";")
+               if human_name != null then
+                       v.add_instr("static const char LOCATE_{cname}[] = \"{human_name}\";")
+               end
                v.add_decl("{r} {cname}({p});")
                v.add_decl("typedef {r} (*{cname}_t)({p});")
                v.add_instr("{r} {cname}({p})\{")
@@ -295,6 +297,7 @@ redef class IRoutine
                v.add_instr("fra.me.meth = LOCATE_{v.basecname};")
                v.add_instr("fra.me.has_broke = 0;")
                v.add_instr("fra.me.REG_size = {std_slots_nb};")
+               v.add_instr("fra.me.nitni_local_ref_head = NULL;")
 
                # Declare/initialize local variables
                for i in [0..std_slots_nb[ do
@@ -871,6 +874,10 @@ redef class INative
                else if c == once "Sys".to_symbol then
                        if n == once "force_garbage_collection".to_symbol then
                                s = "Nit_gc_force_garbage_collection()"
+                       else if n == once "native_argc".to_symbol then
+                               s = "TAG_Int(glob_argc)"
+                       else if n == once "native_argv".to_symbol then
+                               s = "BOX_NativeString(glob_argv[UNTAG_Int({regs[1]})])"
                        end
                else if n == once "object_id".to_symbol then
                        s = "TAG_Int((bigint)((obj_t){regs[0]})[1].object_id)"
@@ -923,7 +930,7 @@ redef class IBoolValue
                v.add_location(location)
                var w = new_result(v)
                w.add("TAG_Bool(")
-               if value then w.add("true") else w.add("false")
+               if value then w.add("1") else w.add("0")
                w.add(")")
        end
 end