import FFIConstants

class FFIEnvironment:
    def __init__(self):
        self.reset()

    def reset(self):
        self.types = {}
        self.globalFunctions = []
        self.downcastFunctions = []
        self.globalValues = []
        self.manifests = []
    
    def addType(self, typeDescriptor, name):
        if name in self.types:
            FFIConstants.notify.info('Redefining type named: ' + name)
        self.types[name] = typeDescriptor
    
    def getTypeNamed(self, name):
        try:
            self.types[name]
        except KeyError:
            raise 'Type not found in FFIEnvironment'
    
    def addGlobalFunction(self, typeDescriptors):
        self.globalFunctions.extend(typeDescriptors)
    def addDowncastFunction(self, typeDescriptor):
        self.downcastFunctions.append(typeDescriptor)
    def addGlobalValue(self, typeDescriptor):
        self.globalValues.append(typeDescriptor)
    def addManifest(self, typeDescriptor):
        self.manifests.append(typeDescriptor)