Esempio n. 1
0
 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},
     )
Esempio n. 2
0
 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)
Esempio n. 3
0
 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})
Esempio n. 4
0
  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)
Esempio n. 5
0
            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,),
Esempio n. 6
0
 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)