def getNineType(type): assert type is not None if not isinstance(type, System.Type): type = util.typeToType(type) typeName = type.FullName if typeName not in ExternalType._Types: #type = ExternalType(type.FullName, builder=type) type = ExternalType.createNineType(type) ExternalType._Types[typeName] = type return type else: return ExternalType._Types[typeName]
def semantic(self, scope): from ast import vartypes from nine import error, util import CLR expr = self.expr.semantic(scope) from ast.external import ExternalType # if not util.getNineType(System.Exception).isParentClass(expr.getType()): if not ExternalType.getNineType(util.typeToType(CLR.System.Exception)).isParentClass(expr.getType()): raise error.SyntaxError( self.position, "You can only throw object instances which inherit System.Exception, not %r" % expr.getType(), ) return RaiseStatement(self.position, expr)