All pastes #409894 Raw Edit

Cody Brocious

public python v1 · immutable
#409894 ·published 2007-03-25 23:46 UTC
rendered paste body
from BaseModule import BaseModuleimport Intermediaries.ShaderAAT as ShaderAATimport HLSLParseclass HLSL(BaseModule):    __expects__ = str    __returns__ = ShaderAAT.ShaderAAT        def process(self, input):        self.aat = ShaderAAT.ShaderAAT()                self.handlers = dict(            function_=self.Function,            functionCall_=self.FunctionCall,            hexNumber_=lambda parent, elem: ShaderAAT.Literal(parent=parent, value=eval(elem[0])),            identifier_=lambda parent, elem: ShaderAAT.Variable(parent=parent, name=elem[0]),            number_=lambda parent, elem: ShaderAAT.Literal(parent=parent, value=eval(elem[0].rstrip('f'))),            operand_=self.Variable,            pass_=self.Pass,            return_=self.Return,            technique10_=self.Technique,            variableDecl_=self.Declaration,        )                ptree = HLSLParse.hlslParse(input)                for elem in ptree[0]:            self.handle(self.aat, elem)                return self.aat        def handle(self, parent, elem):        name = elem._ParseResults__name                if name == None:            print 'WTF!', elem            return None                name += '_'                if name in self.handlers:            self.handlers[name](parent, elem)        else:            print 'Unhandled:', name[:-1]        def Declaration(self, parent, elem):        Declaration = ShaderAAT.Declaration(parent=parent, type=elem.variableDeclType, name=elem.variableDeclName[0])        def Function(self, parent, elem):        Function = ShaderAAT.Function(parent=parent, name=elem.functionName[0], type=elem.functionType)                for line in elem.functionBody:            self.handle(Function, line)        def FunctionCall(self, parent, elem):        (name, ) = elem.functionCallee        args = elem.functionCallArgs        Call = ShaderAAT.Call(parent=parent, name=name)                if len(args):            for arg in args[0]:                self.handle(Call, arg[0][0])        def Pass(self, parent, elem):        Pass = ShaderAAT.Pass(parent=parent, name=elem.passName[0])                for line in elem.passBody:            self.handle(Pass, line)        def Return(self, parent, elem):        Return = ShaderAAT.Return(parent=parent)                Return.value = ShaderAAT.ShaderAAT()        self.handle(Return.value, elem.returnValue[0][0])        def Technique(self, parent, elem):        (name, ) = elem.technique10Name        body = elem.technique10Body        Technique = ShaderAAT.Technique(parent=parent, name=name, version=10)                for elem in body:            self.Pass(Technique, elem)        def Variable(self, parent, elem):        Variable = ShaderAAT.Variable(parent=parent, name=elem.operandBase[0])        Variable.indexes = []                for foo in elem.operandModifiers:            print 'WAH!', foo