예제 #1
0
    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]
예제 #2
0
    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)