Author: Ronan Lamy <ronan.l...@gmail.com> Branch: kill-ootype Changeset: r65656:9483b6d294d3 Date: 2013-07-25 18:10 +0100 http://bitbucket.org/pypy/pypy/changeset/9483b6d294d3/
Log: hg rm pypy/module/clr/ diff --git a/pypy/module/clr/__init__.py b/pypy/module/clr/__init__.py deleted file mode 100644 --- a/pypy/module/clr/__init__.py +++ /dev/null @@ -1,26 +0,0 @@ -# Package initialisation -from pypy.interpreter.mixedmodule import MixedModule - -import boxing_rules # with side effects - -class Module(MixedModule): - """CLR module""" - - appleveldefs = { - 'dotnetimporter': 'app_importer.importer' - } - - interpleveldefs = { - '_CliObject_internal': 'interp_clr.W_CliObject', - 'call_staticmethod': 'interp_clr.call_staticmethod', - 'load_cli_class': 'interp_clr.load_cli_class', - 'get_assemblies_info': 'interp_clr.get_assemblies_info', - 'AddReferenceByPartialName': 'interp_clr.AddReferenceByPartialName', - } - - def startup(self, space): - self.space.appexec([self], """(clr_module): - import sys - clr_module.get_assemblies_info() # load info for std assemblies - sys.meta_path.append(clr_module.dotnetimporter()) - """) diff --git a/pypy/module/clr/app_clr.py b/pypy/module/clr/app_clr.py deleted file mode 100644 --- a/pypy/module/clr/app_clr.py +++ /dev/null @@ -1,204 +0,0 @@ -# NOT_RPYTHON - -class StaticMethodWrapper(object): - __slots__ = ('class_name', 'meth_name',) - - def __init__(self, class_name, meth_name): - self.class_name = class_name - self.meth_name = meth_name - - def __call__(self, *args): - import clr - return clr.call_staticmethod(self.class_name, self.meth_name, args) - - def __repr__(self): - return '<static CLI method %s.%s>' % (self.class_name, self.meth_name) - - -class MethodWrapper(object): - __slots__ = ('meth_name',) - - def __init__(self, meth_name): - self.meth_name = meth_name - - def __get__(self, obj, type_): - if obj is None: - return UnboundMethod(type_, self.meth_name) - else: - return BoundMethod(self.meth_name, obj) - - def __repr__(self): - return '%s(%s)' % (self.__class__.__name__, repr(self.meth_name)) - - -class UnboundMethod(object): - __slots__ = ('im_class', 'im_name') - - def __init__(self, im_class, im_name): - self.im_class = im_class - self.im_name = im_name - - def __raise_TypeError(self, thing): - raise TypeError, 'unbound method %s() must be called with %s ' \ - 'instance as first argument (got %s instead)' % \ - (self.im_name, self.im_class.__cliclass__, thing) - - def __call__(self, *args): - if len(args) == 0: - self.__raise_TypeError('nothing') - im_self = args[0] - if not isinstance(im_self, self.im_class): - self.__raise_TypeError('%s instance' % im_self.__class__.__name__) - return im_self.__cliobj__.call_method(self.im_name, args, 1) # ignore the first arg - - def __repr__(self): - return '<unbound CLI method %s.%s>' % (self.im_class.__cliclass__, self.im_name) - - -class BoundMethod(object): - __slots__ = ('im_name', 'im_self') - - def __init__(self, im_name, im_self): - self.im_name = im_name - self.im_self = im_self - - def __call__(self, *args): - return self.im_self.__cliobj__.call_method(self.im_name, args) - - def __repr__(self): - return '<bound CLI method %s.%s of %s>' % (self.im_self.__class__.__cliclass__, - self.im_name, - self.im_self) - -class StaticProperty(object): - def __init__(self, fget=None, fset=None): - self.fget = fget - self.fset = fset - - def __get__(self, obj, type_): - return self.fget() - -def _qualify(t): - mscorlib = 'mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' - return '%s, %s' % (t, mscorlib) - -class MetaGenericCliClassWrapper(type): - _cli_types = { - int: _qualify('System.Int32'), - str: _qualify('System.String'), - bool: _qualify('System.Boolean'), - float: _qualify('System.Double'), - } - _System_Object = _qualify('System.Object') - - def _cli_name(cls, ttype): - if isinstance(ttype, MetaCliClassWrapper): - return '[%s]' % ttype.__fullyqualifiedname__ - else: - return '[%s]' % cls._cli_types.get(ttype, cls._System_Object) - - def __setattr__(cls, name, value): - obj = cls.__dict__.get(name, None) - if isinstance(obj, StaticProperty): - obj.fset(value) - else: - type.__setattr__(cls, name, value) - - def __getitem__(cls, type_or_tuple): - import clr - if isinstance(type_or_tuple, tuple): - types = type_or_tuple - else: - types = (type_or_tuple,) - namespace, generic_class = cls.__cliclass__.rsplit('.', 1) - generic_params = [cls._cli_name(t) for t in types] - instance_class = '%s[%s]' % (generic_class, ','.join(generic_params)) - try: - return clr.load_cli_class(cls.__assemblyname__, namespace, instance_class) - except ImportError: - raise TypeError, "Cannot load type %s.%s" % (namespace, instance_class) - -class MetaCliClassWrapper(type): - def __setattr__(cls, name, value): - obj = cls.__dict__.get(name, None) - if isinstance(obj, StaticProperty): - obj.fset(value) - else: - type.__setattr__(cls, name, value) - -class CliClassWrapper(object): - __slots__ = ('__cliobj__',) - - def __init__(self, *args): - import clr - self.__cliobj__ = clr._CliObject_internal(self.__fullyqualifiedname__, args) - - -class IEnumeratorWrapper(object): - def __init__(self, enumerator): - self.__enumerator__ = enumerator - - def __iter__(self): - return self - - def next(self): - if not self.__enumerator__.MoveNext(): - raise StopIteration - return self.__enumerator__.Current - -# this method need to be attached only to classes that implements IEnumerable (see build_wrapper) -def __iter__(self): - return IEnumeratorWrapper(self.GetEnumerator()) - -def wrapper_from_cliobj(cls, cliobj): - obj = cls.__new__(cls) - obj.__cliobj__ = cliobj - return obj - -def build_wrapper(namespace, classname, assemblyname, - staticmethods, methods, properties, indexers, - hasIEnumerable, isClassGeneric): - fullname = '%s.%s' % (namespace, classname) - assembly_qualified_name = '%s, %s' % (fullname, assemblyname) - d = {'__cliclass__': fullname, - '__fullyqualifiedname__': assembly_qualified_name, - '__assemblyname__': assemblyname, - '__module__': namespace} - for name in staticmethods: - d[name] = StaticMethodWrapper(assembly_qualified_name, name) - for name in methods: - d[name] = MethodWrapper(name) - - # check if IEnumerable is implemented - if hasIEnumerable: - d['__iter__'] = __iter__ - - assert len(indexers) <= 1 - if indexers: - name, getter, setter, is_static = indexers[0] - assert not is_static - if getter: - d['__getitem__'] = d[getter] - if setter: - d['__setitem__'] = d[setter] - if isClassGeneric: - cls = MetaGenericCliClassWrapper(classname, (CliClassWrapper,), d) - else: - cls = MetaCliClassWrapper(classname, (CliClassWrapper,), d) - - # we must add properties *after* the class has been created - # because we need to store UnboundMethods as getters and setters - for (name, getter, setter, is_static) in properties: - fget = None - fset = None - if getter: - fget = getattr(cls, getter) - if setter: - fset = getattr(cls, setter) - if is_static: - prop = StaticProperty(fget, fset) - else: - prop = property(fget, fset) - setattr(cls, name, prop) - - return cls diff --git a/pypy/module/clr/app_importer.py b/pypy/module/clr/app_importer.py deleted file mode 100644 --- a/pypy/module/clr/app_importer.py +++ /dev/null @@ -1,85 +0,0 @@ -"""NOT_RPYTHON""" - -# Meta hooks are called at the start of Import Processing -# Meta hooks can override the sys.path, frozen modules , built-in modules -# To register a Meta Hook simply add importer object to sys.meta_path - -import sys -import types - -class importer(object): - ''' - If the importer is installed on sys.meta_path, it will - receive a second argument, which is None for a top-level module, or - package.__path__ for submodules or subpackages - - It should return a loader object if the module was found, or None if it wasn\'t. - If find_module() raises an exception, the caller will abort the import. - When importer.find_module("spam.eggs.ham") is called, "spam.eggs" has already - been imported and added to sys.modules. - ''' - - def find_module(self, fullname, path=None): - import clr - namespaces, classes, generics = clr.get_assemblies_info() - - if fullname in namespaces or fullname in classes: - return self # fullname is a .NET Module - else: - return None # fullname is not a .NET Module - - def load_module(self, fullname): - ''' - The load_module() must fulfill the following *before* it runs any code: - Note that the module object *must* be in sys.modules before the - loader executes the module code. - - A If 'fullname' exists in sys.modules, the loader must use that - else the loader must create a new module object and add it to sys.modules. - - module = sys.modules.setdefault(fullname, new.module(fullname)) - - B The __file__ attribute must be set. String say "<frozen>" - - C The __name__ attribute must be set. If one uses - imp.new_module() then the attribute is set automatically. - - D If it\'s a package, the __path__ variable must be set. This must - be a list, but may be empty if __path__ has no further - significance to the importer (more on this later). - - E It should add a __loader__ attribute to the module, set to the loader object. - - ''' - # If it is a call for a Class then return with the Class reference - import clr - namespaces, classes, generics = clr.get_assemblies_info() - - if fullname in classes: - assemblyname = classes[fullname] - fullname = generics.get(fullname, fullname) - ns, classname = fullname.rsplit('.', 1) - sys.modules[fullname] = clr.load_cli_class(assemblyname, ns, classname) - else: # if not a call for actual class (say for namespaces) assign an empty module - if fullname not in sys.modules: - mod = CLRModule(fullname) - mod.__file__ = "<%s>" % self.__class__.__name__ - mod.__loader__ = self - mod.__name__ = fullname - # add it to the modules dict - sys.modules[fullname] = mod - - # if it is a PACKAGE then we are to initialize the __path__ for the module - # we won't deal with Packages here - return sys.modules[fullname] - -class CLRModule(types.ModuleType): - def __getattr__(self, name): - if not name.startswith("__"): - try: - iname = self.__name__ + '.' + name - __import__(iname) - except ImportError: - pass - return types.ModuleType.__getattribute__(self, name) - diff --git a/pypy/module/clr/assemblyname.py b/pypy/module/clr/assemblyname.py deleted file mode 100644 --- a/pypy/module/clr/assemblyname.py +++ /dev/null @@ -1,2 +0,0 @@ -mscorlib = 'mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' -System = 'System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' diff --git a/pypy/module/clr/boxing_rules.py b/pypy/module/clr/boxing_rules.py deleted file mode 100644 --- a/pypy/module/clr/boxing_rules.py +++ /dev/null @@ -1,53 +0,0 @@ -from rpython.tool.pairtype import extendabletype -from pypy.interpreter.baseobjspace import W_Root -from pypy.objspace.std.intobject import W_IntObject -from pypy.objspace.std.floatobject import W_FloatObject -from pypy.objspace.std.boolobject import W_BoolObject -from pypy.objspace.std.noneobject import W_NoneObject -from pypy.objspace.std.stringobject import W_StringObject -from rpython.translator.cli.dotnet import box - -class __extend__(W_Root): - __metaclass__ = extendabletype - - def tocli(self): - return box(self) - -class __extend__(W_IntObject): - __metaclass__ = extendabletype - - def tocli(self): - return box(self.intval) - -class __extend__(W_FloatObject): - __metaclass__ = extendabletype - - def tocli(self): - return box(self.floatval) - -class __extend__(W_NoneObject): - __metaclass__ = extendabletype - - def tocli(self): - return None - -class __extend__(W_BoolObject): - __metaclass__ = extendabletype - - def tocli(self): - return box(self.boolval) - -class __extend__(W_StringObject): - __metaclass__ = extendabletype - - def tocli(self): - return box(self._value) - -##from pypy.objspace.fake.objspace import W_Object as W_Object_Fake -##from rpython.rlib.nonconst import NonConstant - -##class __extend__(W_Object_Fake): -## __metaclass__ = extendabletype - -## def tocli(self): -## return NonConstant(None) diff --git a/pypy/module/clr/interp_clr.py b/pypy/module/clr/interp_clr.py deleted file mode 100644 --- a/pypy/module/clr/interp_clr.py +++ /dev/null @@ -1,364 +0,0 @@ -import os.path -from pypy.module.clr import assemblyname -from pypy.interpreter.baseobjspace import W_Root, W_Root -from pypy.interpreter.error import OperationError, operationerrfmt -from pypy.interpreter.gateway import interp2app, unwrap_spec, ApplevelClass -from pypy.interpreter.typedef import TypeDef -from rpython.rtyper.ootypesystem import ootype -from rpython.translator.cli.dotnet import CLR, box, unbox, NativeException, native_exc,\ - new_array, init_array, typeof - -System = CLR.System -Assembly = CLR.System.Reflection.Assembly -TargetInvocationException = NativeException(CLR.System.Reflection.TargetInvocationException) -AmbiguousMatchException = NativeException(CLR.System.Reflection.AmbiguousMatchException) - -def get_method(space, b_type, name, b_paramtypes): - try: - method = b_type.GetMethod(name, b_paramtypes) - except AmbiguousMatchException: - msg = 'Multiple overloads for %s could match' - raise operationerrfmt(space.w_TypeError, msg, name) - if method is None: - msg = 'No overloads for %s could match' - raise operationerrfmt(space.w_TypeError, msg, name) - return method - -def get_constructor(space, b_type, b_paramtypes): - try: - ctor = b_type.GetConstructor(b_paramtypes) - except AmbiguousMatchException: - msg = 'Multiple constructors could match' - raise OperationError(space.w_TypeError, space.wrap(msg)) - if ctor is None: - msg = 'No overloads for constructor could match' - raise OperationError(space.w_TypeError, space.wrap(msg)) - return ctor - -def rewrap_args(space, w_args, startfrom): - args = space.unpackiterable(w_args) - paramlen = len(args)-startfrom - b_args = new_array(System.Object, paramlen) - b_paramtypes = new_array(System.Type, paramlen) - for i in range(startfrom, len(args)): - j = i-startfrom - b_obj = py2cli(space, args[i]) - b_args[j] = b_obj - if b_obj is None: - b_paramtypes[j] = typeof(System.Object) # we really can't be more precise - else: - b_paramtypes[j] = b_obj.GetType() # XXX: potentially inefficient - return b_args, b_paramtypes - - -def call_method(space, b_obj, b_type, name, w_args, startfrom): - b_args, b_paramtypes = rewrap_args(space, w_args, startfrom) - b_meth = get_method(space, b_type, name, b_paramtypes) - try: - # for an explanation of the box() call, see the log message for revision 35167 - b_res = box(b_meth.Invoke(b_obj, b_args)) - except TargetInvocationException, e: - b_inner = native_exc(e).get_InnerException() - message = str(b_inner.get_Message()) - # TODO: use the appropriate exception, not StandardError - raise OperationError(space.w_StandardError, space.wrap(message)) - if b_meth.get_ReturnType().get_Name() == 'Void': - return space.w_None - else: - return cli2py(space, b_res) - -@unwrap_spec(typename=str, methname=str) -def call_staticmethod(space, typename, methname, w_args): - """ - Call a .NET static method. - - Parameters: - - - typename: the fully qualified .NET name of the class - containing the method (e.g. ``System.Math``) - - - methname: the name of the static method to call (e.g. ``Abs``) - - - args: a list containing the arguments to be passed to the - method. - """ - b_type = System.Type.GetType(typename) # XXX: cache this! - return call_method(space, None, b_type, methname, w_args, 0) - -def py2cli(space, w_obj): - try: - cliobj = space.getattr(w_obj, space.wrap('__cliobj__')) - except OperationError, e: - if e.match(space, space.w_AttributeError): - # it hasn't got a __cloobj__ - return w_obj.tocli() - else: - raise - else: - if isinstance(cliobj, W_CliObject): - return cliobj.b_obj # unwrap it! - else: - # this shouldn't happen! Fallback to the default impl - return w_obj.tocli() - -def cli2py(space, b_obj): - # TODO: support other types and find the most efficient way to - # select the correct case - if b_obj is None: - return space.w_None - - w_obj = unbox(b_obj, W_Root) - if w_obj is not None: - return w_obj # it's already a wrapped object! - - b_type = b_obj.GetType() - if b_type == typeof(System.Int32): - intval = unbox(b_obj, ootype.Signed) - return space.wrap(intval) - elif b_type == typeof(System.Double): - floatval = unbox(b_obj, ootype.Float) - return space.wrap(floatval) - elif b_type == typeof(System.Boolean): - boolval = unbox(b_obj, ootype.Bool) - return space.wrap(boolval) - elif b_type == typeof(System.String): - strval = unbox(b_obj, ootype.String) - return space.wrap(strval) - else: - namespace, classname = split_fullname(b_type.ToString()) - assemblyname = b_type.get_Assembly().get_FullName() - w_cls = load_cli_class(space, assemblyname, namespace, classname) - cliobj = W_CliObject(space, b_obj) - return wrapper_from_cliobj(space, w_cls, cliobj) - -def split_fullname(name): - lastdot = name.rfind('.') - if lastdot < 0: - return '', name - return name[:lastdot], name[lastdot+1:] - -def wrap_list_of_tuples(space, lst): - list_w = [] - for (a,b,c,d) in lst: - items_w = [space.wrap(a), space.wrap(b), space.wrap(c), space.wrap(d)] - list_w.append(space.newtuple(items_w)) - return space.newlist(list_w) - -def wrap_list_of_pairs(space, lst): - list_w = [] - for (a,b) in lst: - items_w = [space.wrap(a), space.wrap(b)] - list_w.append(space.newtuple(items_w)) - return space.newlist(list_w) - -def wrap_list_of_strings(space, lst): - list_w = [space.wrap(s) for s in lst] - return space.newlist(list_w) - -def get_methods(space, b_type): - methods = [] - staticmethods = [] - b_methodinfos = b_type.GetMethods() - for i in range(len(b_methodinfos)): - b_meth = b_methodinfos[i] - if b_meth.get_IsPublic(): - if b_meth.get_IsStatic(): - staticmethods.append(str(b_meth.get_Name())) - else: - methods.append(str(b_meth.get_Name())) - w_staticmethods = wrap_list_of_strings(space, staticmethods) - w_methods = wrap_list_of_strings(space, methods) - return w_staticmethods, w_methods - -def get_properties(space, b_type): - properties = [] - indexers = {} - b_propertyinfos = b_type.GetProperties() - for i in range(len(b_propertyinfos)): - b_prop = b_propertyinfos[i] - get_name = None - set_name = None - is_static = False - if b_prop.get_CanRead(): - get_meth = b_prop.GetGetMethod() - get_name = get_meth.get_Name() - is_static = get_meth.get_IsStatic() - if b_prop.get_CanWrite(): - set_meth = b_prop.GetSetMethod() - if set_meth: - set_name = set_meth.get_Name() - is_static = set_meth.get_IsStatic() - b_indexparams = b_prop.GetIndexParameters() - if len(b_indexparams) == 0: - properties.append((b_prop.get_Name(), get_name, set_name, is_static)) - else: - indexers[b_prop.get_Name(), get_name, set_name, is_static] = None - w_properties = wrap_list_of_tuples(space, properties) - w_indexers = wrap_list_of_tuples(space, indexers.keys()) - return w_properties, w_indexers - -class _CliClassCache: - def __init__(self): - self.cache = {} - - def put(self, fullname, cls): - assert fullname not in self.cache - self.cache[fullname] = cls - - def get(self, fullname): - return self.cache.get(fullname, None) -CliClassCache = _CliClassCache() - -class _AssembliesInfo: - w_namespaces = None - w_classes = None - w_generics = None - w_info = None # a tuple containing (w_namespaces, w_classes, w_generics) -AssembliesInfo = _AssembliesInfo() - -def save_info_for_assembly(space, b_assembly): - info = AssembliesInfo - b_types = b_assembly.GetTypes() - w_assemblyName = space.wrap(b_assembly.get_FullName()) - for i in range(len(b_types)): - b_type = b_types[i] - namespace = b_type.get_Namespace() - fullname = b_type.get_FullName() - if '+' in fullname: - # it's an internal type, skip it - continue - if namespace is not None: - # builds all possible sub-namespaces - # (e.g. 'System', 'System.Windows', 'System.Windows.Forms') - chunks = namespace.split(".") - temp_name = chunks[0] - space.setitem(info.w_namespaces, space.wrap(temp_name), space.w_None) - for chunk in chunks[1:]: - temp_name += "."+chunk - space.setitem(info.w_namespaces, space.wrap(temp_name), space.w_None) - if b_type.get_IsGenericType(): - index = fullname.rfind("`") - assert index >= 0 - pyName = fullname[0:index] - space.setitem(info.w_classes, space.wrap(pyName), w_assemblyName) - space.setitem(info.w_generics, space.wrap(pyName), space.wrap(fullname)) - else: - space.setitem(info.w_classes, space.wrap(fullname), w_assemblyName) - - -def save_info_for_std_assemblies(space): - # in theory we should use Assembly.Load, but it doesn't work with - # pythonnet because it thinks it should use the Load(byte[]) overload - b_mscorlib = Assembly.LoadWithPartialName(assemblyname.mscorlib) - b_System = Assembly.LoadWithPartialName(assemblyname.System) - save_info_for_assembly(space, b_mscorlib) - save_info_for_assembly(space, b_System) - -def get_assemblies_info(space): - info = AssembliesInfo - if info.w_info is None: - info.w_namespaces = space.newdict() - info.w_classes = space.newdict() - info.w_generics = space.newdict() - info.w_info = space.newtuple([info.w_namespaces, info.w_classes, info.w_generics]) - save_info_for_std_assemblies(space) - return info.w_info - -#_______________________________________________________________________________ -# AddReference* methods - -# AddReference', 'AddReferenceByName', 'AddReferenceByPartialName', 'AddReferenceToFile', 'AddReferenceToFileAndPath' - -@unwrap_spec(name=str) -def AddReferenceByPartialName(space, name): - b_assembly = Assembly.LoadWithPartialName(name) - if b_assembly is not None: - save_info_for_assembly(space, b_assembly) - - -@unwrap_spec(assemblyname=str, namespace=str, classname=str) -def load_cli_class(space, assemblyname, namespace, classname): - """ - Load the given .NET class into the PyPy interpreter and return a - Python class referencing to it. - - Parameters: - - - namespace: the full name of the namespace containing the - class (e.g., ``System.Collections``). - - - classname: the name of the class in the specified namespace - (e.g. ``ArrayList``). """ - fullname = '%s.%s' % (namespace, classname) - w_cls = CliClassCache.get(fullname) - if w_cls is None: - w_cls = build_cli_class(space, namespace, classname, fullname, assemblyname) - CliClassCache.put(fullname, w_cls) - return w_cls - -def build_cli_class(space, namespace, classname, fullname, assemblyname): - assembly_qualified_name = '%s, %s' % (fullname, assemblyname) - b_type = System.Type.GetType(assembly_qualified_name) - if b_type is None: - raise operationerrfmt(space.w_ImportError, - "Cannot load .NET type: %s", fullname) - - # this is where we locate the interfaces inherited by the class - # set the flag hasIEnumerable if IEnumerable interface has been by the class - hasIEnumerable = b_type.GetInterface("System.Collections.IEnumerable") is not None - - # this is where we test if the class is Generic - # set the flag isClassGeneric - isClassGeneric = False - if b_type.get_IsGenericType(): - isClassGeneric = True - - w_staticmethods, w_methods = get_methods(space, b_type) - w_properties, w_indexers = get_properties(space, b_type) - return build_wrapper(space, - space.wrap(namespace), - space.wrap(classname), - space.wrap(assemblyname), - w_staticmethods, - w_methods, - w_properties, - w_indexers, - space.wrap(hasIEnumerable), - space.wrap(isClassGeneric)) - - -class W_CliObject(W_Root): - def __init__(self, space, b_obj): - self.space = space - self.b_obj = b_obj - - @unwrap_spec(name=str, startfrom=int) - def call_method(self, name, w_args, startfrom=0): - return call_method(self.space, self.b_obj, self.b_obj.GetType(), name, w_args, startfrom) - -@unwrap_spec(typename=str) -def cli_object_new(space, w_subtype, typename, w_args): - b_type = System.Type.GetType(typename) - b_args, b_paramtypes = rewrap_args(space, w_args, 0) - b_ctor = get_constructor(space, b_type, b_paramtypes) - try: - b_obj = b_ctor.Invoke(b_args) - except TargetInvocationException, e: - b_inner = native_exc(e).get_InnerException() - message = str(b_inner.get_Message()) - # TODO: use the appropriate exception, not StandardError - raise OperationError(space.w_StandardError, space.wrap(message)) - return space.wrap(W_CliObject(space, b_obj)) - -W_CliObject.typedef = TypeDef( - '_CliObject_internal', - __new__ = interp2app(cli_object_new), - call_method = interp2app(W_CliObject.call_method), - ) - -path, _ = os.path.split(__file__) -app_clr = os.path.join(path, 'app_clr.py') -app = ApplevelClass(file(app_clr).read()) -del path, app_clr -build_wrapper = app.interphook("build_wrapper") -wrapper_from_cliobj = app.interphook("wrapper_from_cliobj") diff --git a/pypy/module/clr/test/__init__.py b/pypy/module/clr/test/__init__.py deleted file mode 100644 --- a/pypy/module/clr/test/__init__.py +++ /dev/null @@ -1,1 +0,0 @@ -# diff --git a/pypy/module/clr/test/test_clr.py b/pypy/module/clr/test/test_clr.py deleted file mode 100644 --- a/pypy/module/clr/test/test_clr.py +++ /dev/null @@ -1,292 +0,0 @@ -from pypy.module.clr.assemblyname import mscorlib - -def skip_if_not_pythonnet(): - import py - try: - import clr - except ImportError: - py.test.skip('Must use pythonnet to access .NET libraries') - -skip_if_not_pythonnet() - -class AppTestDotnet: - spaceconfig = dict(usemodules=('clr',)) - - def setup_class(cls): - cls.w_mscorlib = cls.space.wrap(mscorlib) - - def test_cliobject(self): - import clr - obj = clr._CliObject_internal('System.Collections.ArrayList', []) - max_index = obj.call_method('Add', [42]) - assert max_index == 0 - - def test_cache(self): - import clr - ArrayList = clr.load_cli_class(self.mscorlib, 'System.Collections', 'ArrayList') - ArrayList2 = clr.load_cli_class(self.mscorlib, 'System.Collections', 'ArrayList') - assert ArrayList is ArrayList2 - - def test_load_fail(self): - import clr - raises(ImportError, clr.load_cli_class, self.mscorlib, 'Foo', 'Bar') - - def test_ArrayList(self): - import clr - ArrayList = clr.load_cli_class(self.mscorlib, 'System.Collections', 'ArrayList') - obj = ArrayList() - obj.Add(42) - obj.Add(43) - total = obj.get_Item(0) + obj.get_Item(1) - assert total == 42+43 - - def test_ArrayList_error(self): - import clr - ArrayList = clr.load_cli_class(self.mscorlib, 'System.Collections', 'ArrayList') - obj = ArrayList() - raises(StandardError, obj.get_Item, 0) - - def test_float_conversion(self): - import clr - ArrayList = clr.load_cli_class(self.mscorlib, 'System.Collections', 'ArrayList') - obj = ArrayList() - obj.Add(42.0) - item = obj.get_Item(0) - assert isinstance(item, float) - - def test_bool_conversion(self): - import clr - ArrayList = clr.load_cli_class(self.mscorlib, 'System.Collections', 'ArrayList') - obj = ArrayList() - obj.Add(True) - obj.Add(False) - t = obj.get_Item(0) - f = obj.get_Item(1) - assert t and isinstance(t, bool) - assert not f and isinstance(f, bool) - obj.Add(42) - assert obj.Contains(42) - - def test_getitem(self): - import clr - ArrayList = clr.load_cli_class(self.mscorlib, 'System.Collections', 'ArrayList') - obj = ArrayList() - obj.Add(42) - assert obj[0] == 42 - - def test_property(self): - import clr - ArrayList = clr.load_cli_class(self.mscorlib, 'System.Collections', 'ArrayList') - obj = ArrayList() - obj.Add(42) - assert obj.Count == 1 - obj.Capacity = 10 - assert obj.Capacity == 10 - - def test_unboundmethod(self): - import clr - ArrayList = clr.load_cli_class(self.mscorlib, 'System.Collections', 'ArrayList') - obj = ArrayList() - ArrayList.Add(obj, 42) - assert obj.get_Item(0) == 42 - - def test_unboundmethod_typeerror(self): - import clr - ArrayList = clr.load_cli_class(self.mscorlib, 'System.Collections', 'ArrayList') - raises(TypeError, ArrayList.Add) - raises(TypeError, ArrayList.Add, 0) - - def test_overload(self): - import clr - ArrayList = clr.load_cli_class(self.mscorlib, 'System.Collections', 'ArrayList') - obj = ArrayList() - for i in range(10): - obj.Add(i) - assert obj.IndexOf(7) == 7 - assert obj.IndexOf(7, 0, 5) == -1 - - def test_wrong_overload(self): - import clr - Math = clr.load_cli_class(self.mscorlib, 'System', 'Math') - raises(TypeError, Math.Abs, "foo") - - def test_wrong_overload_ctor(self): - from System.Collections import ArrayList - raises(TypeError, ArrayList, "foo") - - def test_staticmethod(self): - import clr - Math = clr.load_cli_class(self.mscorlib, 'System', 'Math') - res = Math.Abs(-42) - assert res == 42 - assert type(res) is int - res = Math.Abs(-42.0) - assert res == 42.0 - assert type(res) is float - - def test_constructor_args(self): - import clr - ArrayList = clr.load_cli_class(self.mscorlib, 'System.Collections', 'ArrayList') - obj = ArrayList(42) - assert obj.Capacity == 42 - - def test_None_as_null(self): - import clr - ArrayList = clr.load_cli_class(self.mscorlib, 'System.Collections', 'ArrayList') - Hashtable = clr.load_cli_class(self.mscorlib, 'System.Collections', 'Hashtable') - x = ArrayList() - x.Add(None) - assert x[0] is None - y = Hashtable() - assert y["foo"] is None - - def test_pass_opaque_arguments(self): - import clr - ArrayList = clr.load_cli_class(self.mscorlib, 'System.Collections', 'ArrayList') - class Foo: - pass - obj = Foo() - x = ArrayList() - x.Add(obj) - obj2 = x[0] - assert obj is obj2 - - def test_string_wrapping(self): - import clr - ArrayList = clr.load_cli_class(self.mscorlib, 'System.Collections', 'ArrayList') - x = ArrayList() - x.Add("bar") - s = x[0] - assert s == "bar" - - def test_static_property(self): - import clr - import os - Environment = clr.load_cli_class(self.mscorlib, 'System', 'Environment') - assert Environment.CurrentDirectory == os.getcwd() - Environment.CurrentDirectory == '/' - assert Environment.CurrentDirectory == os.getcwd() - - def test_GetEnumerator(self): - import clr - ArrayList = clr.load_cli_class(self.mscorlib, 'System.Collections', 'ArrayList') - x = ArrayList() - enum = x.GetEnumerator() - assert enum.MoveNext() is False - - def test_iteration_arrayList(self): - import clr - ArrayList = clr.load_cli_class(self.mscorlib, 'System.Collections', 'ArrayList') - x = ArrayList() - x.Add(1) - x.Add(2) - x.Add(3) - x.Add(4) - sum = 0 - for i in x: - sum += i - assert sum == 1+2+3+4 - - def test_iteration_stack(self): - import clr - Stack = clr.load_cli_class(self.mscorlib, 'System.Collections', 'Stack') - obj = Stack() - obj.Push(1) - obj.Push(54) - obj.Push(21) - sum = 0 - for i in obj: - sum += i - assert sum == 1+54+21 - - def test_load_generic_class(self): - import clr - ListInt = clr.load_cli_class(self.mscorlib, "System.Collections.Generic", "List`1[System.Int32]") - x = ListInt() - x.Add(42) - x.Add(4) - x.Add(4) - sum = 0 - for i in x: - sum += i - assert sum == 42+4+4 - - def test_generic_class_typeerror(self): - import clr - ListInt = clr.load_cli_class(self.mscorlib, "System.Collections.Generic", "List`1[System.Int32]") - x = ListInt() - raises(TypeError, x.Add, "test") - - def test_generic_dict(self): - import clr - genDictIntStr = clr.load_cli_class(self.mscorlib, - "System.Collections.Generic", - "Dictionary`2[System.Int32,System.String]") - x = genDictIntStr() - x[1] = "test" - x[2] = "rest" - assert x[1] == "test" - assert x[2] == "rest" - raises(TypeError, x.__setitem__, 3, 3) - raises(TypeError, x.__setitem__, 4, 4.453) - raises(TypeError, x.__setitem__, "test", 3) - - def test_generic_metaclass_list(self): - import clr - from System.Collections.Generic import List - import System.Int32 - lst = List[System.Int32]() - lst.Add(42) - assert lst[0] == 42 - raises(TypeError, lst.Add, "test") - - lst = List[int]() - lst.Add(42) - assert lst[0] == 42 - raises(TypeError, lst.Add, "test") - - def test_generic_metaclass_dict(self): - import clr - from System.Collections.Generic import Dictionary - import System.Int32 - import System.String - d1 = Dictionary[System.Int32, System.String]() - d1[42]="test" - assert d1[42] == "test" - raises(TypeError, d1.__setitem__, 42, 42) - - d1 = Dictionary[int, str]() - d1[42]="test" - assert d1[42] == "test" - raises(TypeError, d1.__setitem__, 42, 42) - - def test_generic_metaclass_object(self): - import clr - from System.Collections.Generic import List - class Foo(object): - pass - lst = List[Foo]() - f = Foo() - lst.Add(f) - assert lst[0] is f - - def test_generic_metaclass_typeerror(self): - import clr - from System.Collections.Generic import List - raises(TypeError, "List[int, int]") - - def test_py2cli_cliobjects(self): - from System.IO import StreamReader, MemoryStream - mem = MemoryStream(100) - sr = StreamReader(mem) # does not raise - - def test_external_assemblies(self): - import clr - clr.AddReferenceByPartialName('System.Xml') - from System.IO import StringReader - from System.Xml import XmlReader - buffer = StringReader("<foo>test</foo>") - xml = XmlReader.Create(buffer) - xml.ReadStartElement("foo") - assert xml.ReadString() == 'test' - xml.ReadEndElement() diff --git a/pypy/module/clr/test/test_importer.py b/pypy/module/clr/test/test_importer.py deleted file mode 100644 --- a/pypy/module/clr/test/test_importer.py +++ /dev/null @@ -1,76 +0,0 @@ -from pypy.module.clr.test.test_clr import skip_if_not_pythonnet - -skip_if_not_pythonnet() - -class AppTestDotnet: - spaceconfig = dict(usemodules=('clr',)) - - def test_list_of_namespaces_and_classes(self): - import clr - ns, classes, generics = clr.get_assemblies_info() - - assert 'System' in ns - assert 'System.Collections' in ns - assert 'System.Runtime' in ns - assert 'System.Runtime.InteropServices' in ns - - assert 'System' not in classes - assert 'System.Math' in classes - assert 'System.Collections.ArrayList' in classes - - assert 'System.Collections.Generic.List' in classes - assert generics['System.Collections.Generic.List'] == 'System.Collections.Generic.List`1' - - def test_import_hook_simple(self): - mscorlib = 'mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' - import clr - import System.Math - - assert System.Math.Abs(-5) == 5 - assert System.Math.Pow(2, 5) == 2**5 - - Math = clr.load_cli_class(mscorlib, 'System', 'Math') - assert Math is System.Math - - import System - a = System.Collections.Stack() - a.Push(3) - a.Push(44) - sum = 0 - for i in a: - sum += i - assert sum == 3+44 - - import System.Collections.ArrayList - ArrayList = clr.load_cli_class(mscorlib, 'System.Collections', 'ArrayList') - assert ArrayList is System.Collections.ArrayList - - def test_ImportError(self): - def fn(): - import non_existent_module - raises(ImportError, fn) - - def test_import_twice(self): - import System - s1 = System - import System - assert s1 is System - - def test_lazy_import(self): - import System - System.Runtime.InteropServices # does not raise attribute error - - def test_generic_class_import(self): - import System.Collections.Generic.List - - def test_import_from(self): - from System.Collections import ArrayList - - def test_AddReferenceByPartialName(self): - import clr - clr.AddReferenceByPartialName('System.Xml') - import System.Xml.XmlReader # does not raise - - def test_AddReference_early(self): - import clr - clr.AddReferenceByPartialName('System.Xml') diff --git a/pypy/module/clr/test/test_interp_clr.py b/pypy/module/clr/test/test_interp_clr.py deleted file mode 100644 --- a/pypy/module/clr/test/test_interp_clr.py +++ /dev/null @@ -1,10 +0,0 @@ -from pypy.module.clr.interp_clr import split_fullname - -def test_split_fullname(): - split = split_fullname - assert split('Foo') == ('', 'Foo') - assert split('System.Foo') == ('System', 'Foo') - assert split('System.Foo.Bar') == ('System.Foo', 'Bar') - assert split('System.Foo.A+B') == ('System.Foo', 'A+B') - assert split('System.') == ('System', '') - _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit