def create(type_dict, *type_parameters): assert len(type_parameters) == 2, "Type parameters: %s" % repr(type_parameters) key_klazz, value_klazz = type_parameters key_klazz, value_klazz = (TypeFactory.new(type_dict, *key_klazz), TypeFactory.new(type_dict, *value_klazz)) assert isclass(key_klazz) and isclass(value_klazz) assert issubclass(key_klazz, Object) and issubclass(value_klazz, Object) return TypeMetaclass( "%s%sMap" % (key_klazz.__name__, value_klazz.__name__), (MapContainer,), {"KEYTYPE": key_klazz, "VALUETYPE": value_klazz}, )
def deserialize(sig, type_dict): req, default, empty, klazz_schema = sig real_class = TypeFactory.new(type_dict, *klazz_schema) if not empty: return TypeSignature(real_class, default=real_class(default), required=req) else: return TypeSignature(real_class, required=req)
def create(type_dict, *type_parameters): """ Construct a List containing type 'klazz'. """ assert len(type_parameters) == 1 klazz = TypeFactory.new(type_dict, *type_parameters[0]) assert isclass(klazz) assert issubclass(klazz, Object) return TypeMetaclass("%sList" % klazz.__name__, (ListContainer,), {"TYPE": klazz})
def annotator(klazz): assert issubclass(klazz, Structural) klazz_factory, klazz_name, klazz_bindings, klazz_attributes = klazz.serialize_type() old_type_environment = TypeEnvironment.deserialize(klazz_bindings, {}) new_type_environment = TypeEnvironment(*types, **bound_types) return TypeFactory.new({}, 'Struct', klazz_name, new_type_environment.merge(old_type_environment).serialize(), klazz_attributes)
else: if not isinstance(namable, Namable): raise Namable.Unnamable(namable) else: return namable.in_scope(*self.scopes()).find(ref.rest()) @classmethod def type_factory(cls): return "List" @classmethod def type_parameters(cls): return (cls.TYPE.serialize_type(),) List = TypeFactory.wrapper(ListFactory) class MapFactory(TypeFactory): PROVIDES = "Map" @staticmethod def create(type_dict, *type_parameters): assert len(type_parameters) == 2, "Type parameters: %s" % repr(type_parameters) key_klazz, value_klazz = type_parameters key_klazz, value_klazz = (TypeFactory.new(type_dict, *key_klazz), TypeFactory.new(type_dict, *value_klazz)) assert isclass(key_klazz) and isclass(value_klazz) assert issubclass(key_klazz, Object) and issubclass(value_klazz, Object) return TypeMetaclass( "%s%sMap" % (key_klazz.__name__, value_klazz.__name__), (MapContainer,),
def __new__(mcs, name, parents, attributes): if any(parent.__name__ == 'Struct' for parent in parents): type_parameters = StructMetaclass.attributes_to_parameters(attributes) return TypeFactory.new({}, 'Struct', name, (), type_parameters) else: return type.__new__(mcs, name, parents, attributes)