def setPlaceholderActiveType(activeTypeName):
     actactiveTypeName = activeTypeName.lower()
     if (not activeTypeName in ActiveTypeHelper._activeTypeId):
         ActiveTypeHelper._activeTypeId[
             activeTypeName] = globalTypeTable.enterNamedType(
                 activeTypeName, None)
         entry = globalTypeTable.lookupTypeId(
             ActiveTypeHelper._activeTypeId[activeTypeName])
         entry.setReferenced()
         entry.setTypeEntryToGlobal()
 def activateSymtabEntry(aUnit, var, activeTypeName):
     ''' change a symbols type information to the active type '''
     if (not ActiveTypeHelper.isActive(aUnit, var, 0, activeTypeName)):
         symTabEntry = aUnit.symtab.lookup_name(var)
         expTypeEntry = globalTypeTable.lookupTypeId(symTabEntry.typetab_id)
         if isinstance(expTypeEntry.entryKind,
                       TypetabEntry.BuiltInEntryKind):
             symTabEntry.typetab_id = ActiveTypeHelper.getActiveTypeId(
                 activeTypeName)
         else:
             ActiveTypeHelper.__activateTypetabEntry(
                 expTypeEntry, activeTypeName)
Exemplo n.º 3
0
 def markTypeAsReferenced(self, markAlsoAsGlobal):
     # for checking that all entries in type table are referenced by a symtab entry
     DebugManager.debug(self.__class__.__name__ + ":" +
                        sys._getframe().f_code.co_name + " for " +
                        self.debug())
     if self.typetab_id:
         aTypeTabEntry = globalTypeTable.lookupTypeId(self.typetab_id)
         aTypeTabEntry.setReferenced()
         if markAlsoAsGlobal:
             aTypeTabEntry.setTypeEntryToGlobal()
     if (isinstance(self.entryKind, SymtabEntry.InterfaceEntryKind)):
         for gi in self.genericInfo.resolvableTo.values():
             gi.markTypeAsReferenced(markAlsoAsGlobal)
             for arg in gi.specificFormalArgs.args.values():
                 arg[1].markTypeAsReferenced(markAlsoAsGlobal)
Exemplo n.º 4
0
 def enterType(self, newType, localSymtab):
     DebugManager.debug('\t\t' + sys._getframe().f_code.co_name +
                        ': entering type ' + str(newType) + ' for ' +
                        self.debug())
     if not newType:
         raise SymtabError(sys._getframe().f_code.co_name +
                           ': newType is None!',
                           entry=self)
     if (self.typetab_id and
         (not (globalTypeTable.lookupTypeId(self.typetab_id).isExternal()
               and isinstance(self.entryKind, self.SubroutineEntryKind)))):
         # assume a name clash
         raise SymtabError(
             sys._getframe().f_code.co_name +
             ': name clash because the declaration for this symbol conflicts with an earlier declaration using the same name',
             entry=self)
     if isinstance(self.entryKind, self.ProcedureEntryKind):
         DebugManager.debug(
             '\t\t' + sys._getframe().f_code.co_name +
             ': entering type information tells us that this procedure is a function)'
         )
         self.entryKind = self.FunctionEntryKind()
     newStmt = newType[0](newType[1], [], [])
     self.typetab_id = globalTypeTable.getType(newStmt, localSymtab)
Exemplo n.º 5
0
 def typePrint(self):
     return globalTypeTable.lookupTypeId(self.typetab_id).debug()
Exemplo n.º 6
0
 def ourTypePrint(type):
     return globalTypeTable.lookupTypeId(type).debug()