X-Git-Url: http://nitlanguage.org diff --git a/src/interpreter/naive_interpreter.nit b/src/interpreter/naive_interpreter.nit index 311d917..1232a65 100644 --- a/src/interpreter/naive_interpreter.nit +++ b/src/interpreter/naive_interpreter.nit @@ -201,8 +201,8 @@ class NaiveInterpreter # Return the integer instance associated with `val`. fun int_instance(val: Int): Instance do - var ic = get_primitive_class("Int") - var instance = new PrimitiveInstance[Int](ic.mclass_type, val) + var t = mainmodule.int_type + var instance = new PrimitiveInstance[Int](t, val) init_instance_primitive(instance) return instance end @@ -210,8 +210,8 @@ class NaiveInterpreter # Return the char instance associated with `val`. fun char_instance(val: Char): Instance do - var ic = get_primitive_class("Char") - var instance = new PrimitiveInstance[Char](ic.mclass_type, val) + var t = mainmodule.char_type + var instance = new PrimitiveInstance[Char](t, val) init_instance_primitive(instance) return instance end @@ -219,8 +219,8 @@ class NaiveInterpreter # Return the float instance associated with `val`. fun float_instance(val: Float): Instance do - var ic = get_primitive_class("Float") - var instance = new PrimitiveInstance[Float](ic.mclass_type, val) + var t = mainmodule.float_type + var instance = new PrimitiveInstance[Float](t, val) init_instance_primitive(instance) return instance end @@ -239,9 +239,9 @@ class NaiveInterpreter fun array_instance(values: Array[Instance], elttype: MType): Instance do assert not elttype.need_anchor - var nat = new PrimitiveInstance[Array[Instance]](get_primitive_class("NativeArray").get_mtype([elttype]), values) + var nat = new PrimitiveInstance[Array[Instance]](mainmodule.native_array_type(elttype), values) init_instance_primitive(nat) - var mtype = get_primitive_class("Array").get_mtype([elttype]) + var mtype = mainmodule.array_type(elttype) var res = new MutableInstance(mtype) self.init_instance(res) self.send(self.force_get_primitive_method("with_native", mtype), [res, nat, self.int_instance(values.length)]) @@ -268,8 +268,8 @@ class NaiveInterpreter do var val = new FlatBuffer.from(txt) val.add('\0') - var ic = get_primitive_class("NativeString") - var instance = new PrimitiveInstance[Buffer](ic.mclass_type, val) + var t = mainmodule.native_string_type + var instance = new PrimitiveInstance[Buffer](t, val) init_instance_primitive(instance) return instance end @@ -588,13 +588,6 @@ class NaiveInterpreter # A hook to initialize a `PrimitiveInstance` fun init_instance_primitive(recv: Instance) do end - # Return the primitive `MClass` corresponding to the `name` given in parameter - # `name` : name of the primitive class - fun get_primitive_class(name: String): MClass - do - return mainmodule.get_primitive_class(name) - end - # This function determines the correct type according to the receiver of the current propdef (self). fun unanchor_type(mtype: MType): MType do @@ -1008,11 +1001,11 @@ redef class AMethPropdef else if pname == "file_exists" then return v.bool_instance(recvval.to_s.file_exists) else if pname == "file_mkdir" then - recvval.to_s.mkdir - return null + var res = recvval.to_s.mkdir + return v.bool_instance(res == null) else if pname == "file_chdir" then - recvval.to_s.chdir - return null + var res = recvval.to_s.chdir + return v.bool_instance(res == null) else if pname == "file_realpath" then return v.native_string_instance(recvval.to_s.realpath) else if pname == "get_environ" then @@ -1023,6 +1016,9 @@ redef class AMethPropdef return v.int_instance(res) else if pname == "atof" then return v.float_instance(recvval.to_f) + else if pname == "fast_cstring" then + var ns = recvval.to_cstring.to_s.substring_from(args[1].to_i) + return v.native_string_instance(ns) end else if cname == "String" then var cs = v.send(v.force_get_primitive_method("to_cstring", args.first.mtype), [args.first]) @@ -1030,7 +1026,7 @@ redef class AMethPropdef if pname == "files" then var res = new Array[Instance] for f in str.files do res.add v.string_instance(f) - return v.array_instance(res, v.get_primitive_class("String").mclass_type) + return v.array_instance(res, v.mainmodule.string_type) end else if pname == "calloc_string" then return v.native_string_instance("!" * args[1].to_i) @@ -1104,15 +1100,6 @@ redef class AMethPropdef else if pname == "set_buffering_type" then return v.int_instance(recvval.as(PrimitiveNativeFile).set_buffering_type(args[1].to_i, args[2].to_i)) end - else if pname == "calloc_array" then - var recvtype = args.first.mtype.as(MClassType) - var mtype: MType - mtype = recvtype.supertype_to(v.mainmodule, recvtype, v.get_primitive_class("ArrayCapable")) - mtype = mtype.arguments.first - var val = new Array[Instance].filled_with(v.null_instance, args[1].to_i) - var instance = new PrimitiveInstance[Array[Instance]](v.get_primitive_class("NativeArray").get_mtype([mtype]), val) - v.init_instance_primitive(instance) - return instance else if pname == "native_argc" then return v.int_instance(v.arguments.length) else if pname == "native_argv" then @@ -1606,7 +1593,7 @@ redef class ASuperstringExpr if i == null then return null array.add(i) end - var i = v.array_instance(array, v.get_primitive_class("Object").mclass_type) + var i = v.array_instance(array, v.mainmodule.object_type) var res = v.send(v.force_get_primitive_method("to_s", i.mtype), [i]) assert res != null return res