コード例 #1
0
 def resolve_type(self, type, must_resolve_all_generics):
     if isinstance(type, astTypes.GenericsType):
         resolved_type = self.resolution_map.get(type.type_var_name)
         if resolved_type == None and must_resolve_all_generics:
             raise Error(
                 f'''Could not resolve generics type: {type.repr()}''')
         return resolved_type if resolved_type != None else type
     elif isinstance(type, astTypes.ClassType):
         return astTypes.ClassType(
             type.decl,
             list(
                 map(
                     lambda x: self.resolve_type(x,
                                                 must_resolve_all_generics),
                     type.type_arguments)))
     elif isinstance(type, astTypes.InterfaceType):
         return astTypes.InterfaceType(
             type.decl,
             list(
                 map(
                     lambda x: self.resolve_type(x,
                                                 must_resolve_all_generics),
                     type.type_arguments)))
     elif isinstance(type, astTypes.LambdaType):
         return astTypes.LambdaType(
             list(
                 map(
                     lambda x: types.MethodParameter(
                         x.name,
                         self.resolve_type(x.type, must_resolve_all_generics
                                           ), x.initializer, None),
                     type.parameters)),
             self.resolve_type(type.return_type, must_resolve_all_generics))
     else:
         return type
コード例 #2
0
 def __init__(self, name, type_arguments, base_interfaces, fields, methods,
              is_exported, leading_trivia):
     self.name = name
     self.type_arguments = type_arguments
     self.base_interfaces = base_interfaces
     self.fields = fields
     self.methods = methods
     self.is_exported = is_exported
     self.leading_trivia = leading_trivia
     self.parent_file = None
     self.attributes = None
     self.type = astTypes.InterfaceType(
         self,
         list(map(lambda x: astTypes.GenericsType(x), self.type_arguments)))
     self._base_interface_cache = None
コード例 #3
0
    def visit_type(self, type):
        super().visit_type(type)
        if isinstance(type, astTypes.UnresolvedType):
            if self.current_interface != None and type.type_name in self.current_interface.type_arguments:
                return astTypes.GenericsType(type.type_name)

            symbol = self.current_file.available_symbols.get(type.type_name)
            if symbol == None:
                self.error_man.throw(
                    f'''Unresolved type \'{type.type_name}\' was not found in available symbols'''
                )
                return type

            if isinstance(symbol, types.Class):
                return astTypes.ClassType(symbol, type.type_arguments)
            elif isinstance(symbol, types.Interface):
                return astTypes.InterfaceType(symbol, type.type_arguments)
            elif isinstance(symbol, types.Enum):
                return astTypes.EnumType(symbol)
            else:
                self.error_man.throw(f'''Unknown symbol type: {symbol}''')
                return type
        else:
            return type