rendered paste bodyfrom 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