fun native_array_def(pname: String, ret_type: nullable MType, arguments: Array[RuntimeVariable]): Bool do return false
src/compiler/abstract_compiler.nit:1361,2--119
redef fun native_array_def(pname, ret_type, arguments)
do
var elttype = arguments.first.mtype
var nclass = mmodule.native_array_class
var recv = "((struct instance_{nclass.c_name}*){arguments[0]})->values"
if pname == "[]" then
# Because the objects are boxed, return the box to avoid unnecessary (or broken) unboxing/reboxing
var res = self.new_expr("{recv}[{arguments[1]}]", compiler.mainmodule.object_type)
res.mcasttype = ret_type.as(not null)
self.ret(res)
return true
else if pname == "[]=" then
self.add("{recv}[{arguments[1]}]={arguments[2]};")
return true
else if pname == "length" then
self.ret(self.new_expr("((struct instance_{nclass.c_name}*){arguments[0]})->length", ret_type.as(not null)))
return true
else if pname == "copy_to" then
var recv1 = "((struct instance_{nclass.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 instance_{nclass.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
src/compiler/separate_compiler.nit:2187,2--2215,4
redef fun native_array_def(pname, ret_type, arguments)
do
var elttype = arguments.first.mtype
var recv = "((struct {arguments[0].mcasttype.c_name}*){arguments[0]})->values"
if pname == "[]" then
self.ret(self.new_expr("{recv}[{arguments[1]}]", ret_type.as(not null)))
return true
else if pname == "[]=" then
self.add("{recv}[{arguments[1]}]={arguments[2]};")
return true
else if pname == "length" then
self.ret(self.new_expr("((struct {arguments[0].mcasttype.c_name}*){arguments[0]})->length", ret_type.as(not null)))
return true
else if pname == "copy_to" then
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
src/compiler/global_compiler.nit:419,2--443,4