def testFromStringChars(self): name = Name.fromString("||") self.assertEquals(Name(["||"]), name) self.assertRaises(ValueError, Name.fromString, "||", isPackageName=True)
def infoAndScopeWithPackageNames(self, args): packageNameFromString = lambda s: Name.fromString(s, isPackageName=True) names = map(packageNameFromString, args) package = Package(id=TARGET_PACKAGE_ID) packageLoader = FakePackageLoader(names) info = CompileInfo(None, package, packageLoader) scope = PackageScope(PACKAGE_SCOPE_ID, None, info, names, [], None) return info, scope
def readHeader(self): headerSize = struct.calcsize(HEADER_FORMAT) headerBytes = self.inFile.read(headerSize) headers = struct.unpack(HEADER_FORMAT, headerBytes) magic, major, minor = headers[0:3] if magic != MAGIC or major != MAJOR_VERSION or minor != MINOR_VERSION: raise IOError("package headers don't look valid") flags = headers[3] stringCount = headers[4] self.package.strings = [None] * stringCount nameCount = headers[5] self.package.names = [None] * nameCount # We pre-allocate top-level definitions so they can point to each other if we read # them out of order. This is particularly important for type definitions. globalCount = headers[6] self.package.globals = self.createEmptyGlobalList( globalCount, self.package.id) functionCount = headers[7] self.package.functions = self.createEmptyFunctionList( functionCount, self.package.id) classCount = headers[8] self.package.classes = self.createEmptyClassList( classCount, self.package.id) traitCount = headers[9] self.package.traits = self.createEmptyTraitList( traitCount, self.package.id) depCount = headers[10] self.package.dependencies = [None] * depCount entryFunctionIndex = headers[11] if entryFunctionIndex != -1: if entryFunctionIndex < 0 or entryFunctionIndex >= len( self.package.functions): raise IOError("invalid entry function index") self.package.entryFunction = self.package.functions[ entryFunctionIndex] initFunctionIndex = headers[12] if initFunctionIndex != -1: if initFunctionIndex < 0 or initFunctionIndex >= len( self.package.functions): raise IOError("invalid init function index") self.package.initFunction = self.package.functions[ initFunctionIndex] nameStr = self.readString() self.package.name = Name.fromString(nameStr, isPackageName=True) versionStr = self.readString() self.package.version = ir.PackageVersion.fromString(versionStr) self.package.id.name = self.package.name
def testFunctionTypeParameterStatic(self): source = "def f[static T] = ()" info = self.analyzeFromSource(source) T = info.package.findTypeParameter(name="f.T") self.assertEquals(Name.fromString("f.T"), T.name) self.assertEquals(frozenset([STATIC]), T.flags) f = info.package.findFunction(name="f") self.assertEquals(1, len(f.typeParameters)) self.assertIs(T, f.typeParameters[0]) self.assertEquals(0, T.index)
def testFromStringBasic(self): name = Name.fromString("foo") self.assertEquals(Name(["foo"]), name) name = Name.fromString("foo.bar.baz") self.assertEquals(Name(["foo", "bar", "baz"]), name)