Merge: Simplify AMethPropdef
authorJean Privat <jean@pryen.org>
Mon, 12 May 2014 15:42:05 +0000 (11:42 -0400)
committerJean Privat <jean@pryen.org>
Mon, 12 May 2014 15:42:05 +0000 (11:42 -0400)
Prepare the change of the hierarchies of subclasses of AMethPropdef.

The first two commits generalize services of subclasses.
The rest updates clients to not statically rely on such a subclass.

This will permit the refactorization and the rationalization of the parser and the AST.

Pull-Request: #434
Reviewed-by: Alexandre Terrasa <alexandre@moz-code.org>

1  2 
src/abstract_compiler.nit
src/common_ffi/common_ffi.nit
src/common_ffi/ffi_base.nit
src/debugger.nit
src/modelize_property.nit
src/naive_interpreter.nit
src/nitx.nit
src/parser_util.nit

Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
@@@ -802,71 -867,20 +867,20 @@@ redef class AMethPropde
                                recvval.copy(0, args[2].to_i, args[1].val.as(Array[Instance]), 0)
                                return null
                        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.mainmodule.get_primitive_class("ArrayCapable"))
-                       mtype = mtype.arguments.first
-                       var val = new Array[Instance].filled_with(v.null_instance, args[1].to_i)
-                       return new PrimitiveInstance[Array[Instance]](v.mainmodule.get_primitive_class("NativeArray").get_mtype([mtype]), val)
-               else if pname == "native_argc" then
-                       return v.int_instance(v.arguments.length)
-               else if pname == "native_argv" then
-                       var txt = v.arguments[args[1].to_i]
-                       return v.native_string_instance(txt)
-               end
-               fatal(v, "NOT YET IMPLEMENTED intern {mpropdef}")
-               abort
-       end
- end
- redef class AbstractArray[E]
-       fun copy(start: Int, len: Int, dest: AbstractArray[E], new_start: Int)
-       do
-               self.copy_to(start, len, dest, new_start)
-       end
- end
- redef class AExternInitPropdef
-       redef fun call(v, mpropdef, args)
-       do
-               var pname = mpropdef.mproperty.name
-               var cname = mpropdef.mclassdef.mclass.name
-               if pname == "native_stdout" then
-                       return new PrimitiveInstance[OStream](mpropdef.mclassdef.mclass.mclass_type, sys.stdout)
-               else if pname == "native_stdin" then
-                       return new PrimitiveInstance[IStream](mpropdef.mclassdef.mclass.mclass_type, sys.stdin)
-               else if pname == "native_stderr" then
-                       return new PrimitiveInstance[OStream](mpropdef.mclassdef.mclass.mclass_type, sys.stderr)
-               else if pname == "io_open_read" then
-                       var a1 = args[1].val.as(Buffer)
-                       return new PrimitiveInstance[IStream](mpropdef.mclassdef.mclass.mclass_type, new IFStream.open(a1.to_s))
-               else if pname == "io_open_write" then
-                       var a1 = args[1].val.as(Buffer)
-                       return new PrimitiveInstance[OStream](mpropdef.mclassdef.mclass.mclass_type, new OFStream.open(a1.to_s))
-               end
-               fatal(v, "NOT YET IMPLEMENTED extern init {mpropdef}")
-               abort
-       end
- end
- redef class AExternMethPropdef
-       super TablesCapable
-       redef fun call(v, mpropdef, args)
-       do
-               var pname = mpropdef.mproperty.name
-               var cname = mpropdef.mclassdef.mclass.name
-               if cname == "Int" then
-                       var recvval = args.first.val.as(Int)
-                       if pname == "rand" then
-                               var res = recvval.rand
-                               return v.int_instance(res)
-                       else if pname == "native_int_to_s" then
-                               return v.native_string_instance(recvval.to_s)
-                       else if pname == "strerror_ext" then
-                               return v.native_string_instance(recvval.strerror)
-                       end
                else if cname == "NativeFile" then
+                       if pname == "native_stdout" then
 -                              return new PrimitiveInstance[OStream](mpropdef.mclassdef.mclass.mclass_type, stdout)
++                              return new PrimitiveInstance[OStream](mpropdef.mclassdef.mclass.mclass_type, sys.stdout)
+                       else if pname == "native_stdin" then
 -                              return new PrimitiveInstance[IStream](mpropdef.mclassdef.mclass.mclass_type, stdin)
++                              return new PrimitiveInstance[IStream](mpropdef.mclassdef.mclass.mclass_type, sys.stdin)
+                       else if pname == "native_stderr" then
 -                              return new PrimitiveInstance[OStream](mpropdef.mclassdef.mclass.mclass_type, stderr)
++                              return new PrimitiveInstance[OStream](mpropdef.mclassdef.mclass.mclass_type, sys.stderr)
+                       else if pname == "io_open_read" then
+                               var a1 = args[1].val.as(Buffer)
+                               return new PrimitiveInstance[IStream](mpropdef.mclassdef.mclass.mclass_type, new IFStream.open(a1.to_s))
+                       else if pname == "io_open_write" then
+                               var a1 = args[1].val.as(Buffer)
+                               return new PrimitiveInstance[OStream](mpropdef.mclassdef.mclass.mclass_type, new OFStream.open(a1.to_s))
+                       end
                        var recvval = args.first.val
                        if pname == "io_write" then
                                var a1 = args[1].val.as(Buffer)
diff --cc src/nitx.nit
Simple merge
Simple merge