Beispiel #1
0
    def testAncestry(self):
        from ast.namespace import Namespace
        from nine.driver import Driver

        driver = Driver()
        ns = Namespace('')
        driver._scanAssembly(ns, 'mscorlib')

        string = ns.symbols['System'].symbols['String']
        object = ns.symbols['System'].symbols['Object']

        assert not string.isDescendant(object)
        assert object.isDescendant(string), string.bases
Beispiel #2
0
    def testGetMethods(self):
        'testGetMethods: ClassDecl.getMethods'
        driver = Driver()
        ns = Namespace('')
        driver._scanAssembly(ns, 'bin/ClassLibrary1')

        class1 = ns.symbols['TestClass'].symbols['TestClass']
        assert isinstance(class1, ExternalClass)

        names = set([func.name for func in class1.getMethods()])
        expected = set(['Method', 'Method', 'StaticMethod', 'StaticMethod'])

        # There will be all kinds of other crud in there.  None of it matters, as long as the right names are where they should be.
        self.failUnless(names > expected, (names, expected))
Beispiel #3
0
def semanticProgram(program, assemblies=[]):
    from ast.namespace import Namespace
    from ast.vartypes import Type

    driver = Driver()
    globalNs = Namespace('')
    for asm in assemblies:
        driver._scanAssembly(globalNs, asm)

    driver.fixPrimitives()

    globalScope = semantic.makeGlobalScope(globalNs.symbols)

    return semantic.semantic(parse(lex(program)), globalScope)
Beispiel #4
0
    def testGetMethod(self):
        driver = Driver()
        ns = Namespace('')
        driver._scanAssembly(ns, 'mscorlib')

        console = ns.symbols['System'].symbols['Console']

        writeLineStr = console.getMethod('WriteLine', (vartypes.StringType,), vartypes.VoidType)
        assert writeLineStr is not None

        nonExistent = console.getMethod('WriteLine', (vartypes.StringType,), vartypes.FloatType)
        assert nonExistent is None, writeLineStr

        toStr = console.getMethod('ToString', (), System.String)
        assert toStr is not None
Beispiel #5
0
    def testScanAssembly(self):
        from nine.scope import Scope
        from ast.namespace import Namespace

        scope = Scope(parent=None)
        globalNs = Namespace('')

        driver = Driver()
        driver.addReference('bin/ClassLibrary1')
        driver._scanAssembly(globalNs, 'bin/ClassLibrary1')

        cls = globalNs.symbols['TestClass'].symbols['TestClass']

        assert isinstance(cls, ExternalClass)
        assert cls.external

        self.assertEqual(cls.name, 'TestClass')
Beispiel #6
0
def buildProgram(name, program, assemblies=[]):
    exeName = name
    path, name = os.path.split(exeName)
    name, ext = os.path.splitext(name)
    path = path or 'bin'
    ext = ext or '.exe'

    exeName = os.path.join(path, name + ext)

    if os.access(exeName, os.F_OK):
        # Delete any pre-existing file
        os.unlink(exeName)

    driver = Driver()

    for asm in assemblies:
        driver.addReference(asm)

    driver.compileString(program, exeName)

    assert os.access(exeName, os.F_OK)
class DriverTest(unittest.TestCase):
    def setUp(self):
        self.driver = Driver()

    def testNewDriver(self):
        self.failUnless(self.driver is not None)

    def testCompileString(self):
        program = util.source('''
            print 'Hello, driver test!'
        ''')

        util.runProgram('driver_hello_test', program)

    def testLoadAssembly(self):
        a = self.driver._loadAssembly('bin/ClassLibrary1')
        self.failUnless(a is not None, a)

        self.failUnlessRaises(
            Exception,
            lambda: self.driver._loadAssembly('does_not_exist')
        )
Beispiel #8
0
    def testGetCtor(self):
        from ast.parameter import Parameter

        driver = Driver()
        ns = Namespace('')
        driver._scanAssembly(ns, 'mscorlib')

        string = ns.symbols['System'].symbols['String']
        int32 = ns.symbols['System'].symbols['Int32']
        char = ns.symbols['System'].symbols['Char']

        c1args = (
            Parameter((0,"<>"), 'a', char),
            Parameter((0,"<>"), 'b', int32)
        )
        c2args = (Parameter((0,"<>"), 'b', int32),)

        c1 = string.getCtor(c1args)
        c2 = string.getCtor(c2args)

        assert c1 is not None
        assert c2 is None
 def setUp(self):
     self.driver = Driver()
Beispiel #10
0
if len(args) < 2:
    syntax()

try:
    options, args = getopt.gnu_getopt(sys.argv[1:], 'r:o:')
except getopt.GetoptError, e:
    print e
    syntax()

from nine.driver import Driver

sources = args
outputName = '9out'
references = []

the_driver = Driver()

for option, operand in options:
    if option == '-r':
        the_driver.addReference(operand)

    if option == '-o':
        outputName = operand

if 0:
    try:
        the_driver.compile(sources, outputName)
    except error.CodeError, e:
        print e
        sys.exit(1)
else: