X-Git-Url: http://nitlanguage.org diff --git a/src/compiler/global_compiler.nit b/src/compiler/global_compiler.nit index d2a8a0c..7b07847 100644 --- a/src/compiler/global_compiler.nit +++ b/src/compiler/global_compiler.nit @@ -151,7 +151,7 @@ class GlobalCompiler if self.classids.has_key(mtype) then return self.classids[mtype] end - print "No classid for {mtype}" + print_error "No classid for {mtype}" abort end @@ -330,7 +330,7 @@ class GlobalCompilerVisitor redef fun unbox_extern(value, mtype) do if mtype isa MClassType and mtype.mclass.kind == extern_kind and - mtype.mclass.name != "NativeString" then + mtype.mclass.name != "CString" then var res = self.new_var_extern(mtype) self.add "{res} = ((struct {mtype.c_name}*){value})->value; /* unboxing {value.mtype} */" return res @@ -342,7 +342,7 @@ class GlobalCompilerVisitor redef fun box_extern(value, mtype) do if not mtype isa MClassType or mtype.mclass.kind != extern_kind or - mtype.mclass.name == "NativeString" then return value + mtype.mclass.name == "CString" then return value var valtype = value.mtype.as(MClassType) var res = self.new_var(mtype) @@ -396,6 +396,11 @@ class GlobalCompilerVisitor var recv1 = "((struct {arguments[1].mcasttype.c_name}*){arguments[1]})->values" self.add("memmove({recv1},{recv},{arguments[2]}*sizeof({elttype.ctype}));") return true + else if pname == "memmove" then + # fun memmove(start: Int, length: Int, dest: NativeArray[E], dest_start: Int) is intern do + var recv1 = "((struct {arguments[3].mcasttype.c_name}*){arguments[3]})->values" + self.add("memmove({recv1}+{arguments[4]}, {recv}+{arguments[1]}, {arguments[2]}*sizeof({elttype.ctype}));") + return true end return false end @@ -421,11 +426,6 @@ class GlobalCompilerVisitor self.add("{recv}[{i}]={val};") end - redef fun calloc_array(ret_type, arguments) - do - self.ret(self.new_expr("NEW_{ret_type.c_name}({arguments[1]})", ret_type)) - end - redef fun send(m, args) do var types = self.collect_types(args.first) @@ -443,6 +443,10 @@ class GlobalCompilerVisitor if args.first.mtype.is_c_primitive then var mclasstype = args.first.mtype.as(MClassType) if not self.compiler.runtime_type_analysis.live_types.has(mclasstype) then + self.add("/* skip, dead class {mclasstype} */") + return res + end + if not mclasstype.has_mproperty(self.compiler.mainmodule, m) then self.add("/* skip, no method {m} */") return res end @@ -519,7 +523,7 @@ class GlobalCompilerVisitor fun check_valid_reciever(recvtype: MClassType) do if self.compiler.runtime_type_analysis.live_types.has(recvtype) or recvtype.mclass.name == "Object" then return - print "{recvtype} is not a live type" + print_error "{recvtype} is not a live type" abort end