def functionDefination(self, signature): return self.perform(operation.BeginFunction(signature)).getOutput()
def beginFunction(self): return self.perform(operation.BeginFunction()).getOutput()
def main(): prog = program.Program([ instructions.Instruction(operation.LoadInteger(1), False, [variable.Variable(0)]), instructions.Instruction(operation.LoadInteger(9), False, [variable.Variable(3)]), instructions.Instruction(operation.LoadString("thisisastring"), False, [variable.Variable(1)]), instructions.Instruction(operation.LoadInteger(True), False, [variable.Variable(4)]), instructions.Instruction( operation.BeginWhile(">"), [variable.Variable(0), variable.Variable(3)]), instructions.Instruction(operation.LoadInteger(1337), False, [variable.Variable(6)]), instructions.Instruction(operation.BeginIf(), [variable.Variable(2)]), instructions.Instruction(operation.LoadString("thisisastring"), False, [variable.Variable(9)]), instructions.Instruction(operation.EndIf()), instructions.Instruction( operation.BinaryOperation(">"), [variable.Variable(0), variable.Variable(3)], [variable.Variable(5)]), instructions.Instruction(operation.EndWhile()), instructions.Instruction(operation.LoadInteger(10), False, [variable.Variable(31337)]), ]) prog = program.Program([ instructions.Instruction(operation.LoadInteger(0), False, [variable.Variable(0)]), instructions.Instruction(operation.LoadInteger(1), False, [variable.Variable(1)]), instructions.Instruction(operation.LoadInteger(10), False, [variable.Variable(2)]), instructions.Instruction(operation.LoadInteger(10), False, [variable.Variable(3)]), instructions.Instruction(operation.LoadInteger(20), False, [variable.Variable(4)]), instructions.Instruction(operation.LoadInteger(5), False, [variable.Variable(5)]), instructions.Instruction(operation.Phi(), [variable.Variable(3)], [variable.Variable(6)]), instructions.Instruction(operation.Phi(), [variable.Variable(4)], [variable.Variable(7)]), instructions.Instruction(operation.BeginFor("++", "<"), [ variable.Variable(0), variable.Variable(2), variable.Variable(8) ]), instructions.Instruction( operation.BinaryOperation("<"), [variable.Variable(8), variable.Variable(5)], [variable.Variable(6)]), instructions.Instruction(operation.BeginIf(), [variable.Variable(6)], False), instructions.Instruction(operation.LoadInteger(0), False, [variable.Variable(9)]), instructions.Instruction( operation.BeginWhile("<"), [variable.Variable(9), variable.Variable(5)], False), instructions.Instruction( operation.BinaryOperation("+"), [variable.Variable(6), variable.Variable(1)], [variable.Variable(10)]), instructions.Instruction( operation.Copy(), [variable.Variable(6), variable.Variable(10)]), instructions.Instruction( operation.BinaryOperation("+"), [variable.Variable(9), variable.Variable(1)], [variable.Variable(11)]), instructions.Instruction( operation.Copy(), [variable.Variable(6), variable.Variable(10)]), instructions.Instruction( operation.BeginFunction( typesData.FunctionSignature(2, [variable.Variable(11)])), False, [variable.Variable(1)], [variable.Variable(10), variable.Variable(11)]), instructions.Instruction( operation.BinaryOperation("+"), [variable.Variable(10), variable.Variable(11)], [variable.Variable(2)]), instructions.Instruction(operation.LoadString("somestring"), False, [variable.Variable(3)]), instructions.Instruction(operation.Return(), [variable.Variable(2)]), instructions.Instruction(operation.EndFunction()), instructions.Instruction(operation.LoadInteger(1337), False, [variable.Variable(4)]), instructions.Instruction(operation.CallFunction(2), [ variable.Variable(1), variable.Variable(4), variable.Variable(0) ], [variable.Variable(6)]), instructions.Instruction(operation.EndWhile(), False, False), instructions.Instruction(operation.BeginElse(), False, False), instructions.Instruction(operation.LoadInteger(0), False, [variable.Variable(9)]), instructions.Instruction( operation.BeginWhile("<"), [variable.Variable(9), variable.Variable(5)], False), instructions.Instruction( operation.BinaryOperation("+"), [variable.Variable(7), variable.Variable(1)], [variable.Variable(10)]), instructions.Instruction( operation.Copy(), [variable.Variable(7), variable.Variable(10)]), instructions.Instruction( operation.BinaryOperation("+"), [variable.Variable(9), variable.Variable(1)], [variable.Variable(11)]), instructions.Instruction( operation.Copy(), [variable.Variable(6), variable.Variable(10)]), instructions.Instruction(operation.EndWhile(), False, False), instructions.Instruction(operation.EndIf(), False, False), instructions.Instruction(operation.EndFor(), False, False), instructions.Instruction(operation.LoadInteger(1), False, [variable.Variable(90)]), ]) program.Program([ instructions.Instruction(operation.LoadInteger(1), False, [variable.Variable(0)]), instructions.Instruction( operation.BeginFunction( typesData.FunctionSignature(2, [variable.Variable(11)])), False, [variable.Variable(1)], [variable.Variable(10), variable.Variable(11)]), instructions.Instruction( operation.BinaryOperation("+"), [variable.Variable(10), variable.Variable(11)], [variable.Variable(2)]), instructions.Instruction(operation.LoadString("somestring"), False, [variable.Variable(3)]), instructions.Instruction(operation.Return(), [variable.Variable(2)]), instructions.Instruction(operation.EndFunction()), instructions.Instruction(operation.LoadInteger(1337), False, [variable.Variable(4)]), instructions.Instruction(operation.CallFunction(2), [ variable.Variable(1), variable.Variable(4), variable.Variable(0) ], [variable.Variable(6)]), instructions.Instruction(operation.LoadInteger(1337), False, [variable.Variable(7)]), ]) print prog ctx = ContextAnalyzer(prog) ctx.doAnalyze()
[variable.Variable(9), variable.Variable(1)], [variable.Variable(11)]), instructions.Instruction( operation.Copy(), [variable.Variable(6), variable.Variable(10)]), instructions.Instruction(operation.EndWhile(), False, False), instructions.Instruction(operation.EndIf(), False, False), instructions.Instruction(operation.EndFor(), False, False) ]) Program() Program([ instructions.Instruction(operation.LoadInteger(1), False, [variable.Variable(0)]), instructions.Instruction( operation.BeginFunction(typesData.FunctionSignature(2)), False, [variable.Variable(1)], [variable.Variable(10), variable.Variable(11)]), instructions.Instruction( operation.BinaryOperation("+"), [variable.Variable(10), variable.Variable(11)], [variable.Variable(2)]), instructions.Instruction(operation.LoadString("somestring"), False, [variable.Variable(3)]), instructions.Instruction(operation.Return(), [variable.Variable(3)]), instructions.Instruction(operation.EndFunction()), instructions.Instruction(operation.LoadInteger(1337), False, [variable.Variable(4)]), instructions.Instruction( operation.CallFunction(2),
def main(): prog = program.Program([ instructions.Instruction(operation.LoadInteger(10), False, [variable.Variable(0)]), instructions.Instruction(operation.LoadFloat(1.1), False, [variable.Variable(1)]), instructions.Instruction(operation.LoadBoolean(True), False, [variable.Variable(1)]), instructions.Instruction(operation.LoadString("qweqweqweqwe"), False, [variable.Variable(0)]), instructions.Instruction(operation.BeginIf(), [variable.Variable(2)]), instructions.Instruction(operation.BeginElse()), instructions.Instruction(operation.EndIf()) ]) prog = program.Program([ instructions.Instruction(operation.LoadString("phar"), False, [variable.Variable(100)]), instructions.Instruction(operation.Include(), [variable.Variable(100)]), instructions.Instruction(operation.Include(), [variable.Variable(100)]), instructions.Instruction(operation.LoadInteger(1), False, [variable.Variable(0)]), instructions.Instruction( operation.BeginFunction(typesData.FunctionSignature(2)), False, [variable.Variable(1)], [variable.Variable(10), variable.Variable(11)]), instructions.Instruction( operation.BinaryOperation("+"), [variable.Variable(10), variable.Variable(11)], [variable.Variable(2)]), instructions.Instruction(operation.LoadString("somestring"), False, [variable.Variable(3)]), instructions.Instruction(operation.Return(), [variable.Variable(2)]), instructions.Instruction(operation.EndFunction()), instructions.Instruction(operation.LoadInteger(1337), False, [variable.Variable(4)]), instructions.Instruction(operation.CallFunction(2), [ variable.Variable(1), variable.Variable(4), variable.Variable(0) ], [variable.Variable(6)]), instructions.Instruction(operation.LoadInteger(1337), False, [variable.Variable(7)]), instructions.Instruction(operation.Break()), instructions.Instruction(operation.Continue()), instructions.Instruction(operation.UnaryOperation("++"), [variable.Variable(0)], [variable.Variable(0)]), ]) prog = program.Program([ instructions.Instruction(operation.LoadString("phar"), False, [variable.Variable(100)]), instructions.Instruction(operation.Include(), [variable.Variable(100)]), instructions.Instruction(operation.Include(), [variable.Variable(100)]), instructions.Instruction(operation.LoadInteger(0), False, [variable.Variable(0)]), instructions.Instruction(operation.LoadInteger(1), False, [variable.Variable(1)]), instructions.Instruction(operation.LoadInteger(10), False, [variable.Variable(2)]), instructions.Instruction(operation.LoadInteger(10), False, [variable.Variable(3)]), instructions.Instruction(operation.LoadInteger(20), False, [variable.Variable(4)]), instructions.Instruction(operation.LoadInteger(5), False, [variable.Variable(5)]), instructions.Instruction(operation.LoadInteger(50), False, [variable.Variable(8)]), instructions.Instruction(operation.Phi(), [variable.Variable(3)], [variable.Variable(6)]), instructions.Instruction(operation.Phi(), [variable.Variable(4)], [variable.Variable(7)]), instructions.Instruction(operation.BeginFor("++", "<"), [ variable.Variable(0), variable.Variable(2), variable.Variable(8) ], False, [variable.Variable(80)]), instructions.Instruction( operation.BinaryOperation("<"), [variable.Variable(8), variable.Variable(5)], [variable.Variable(6)]), instructions.Instruction(operation.BeginIf(), [variable.Variable(6)], False), instructions.Instruction(operation.LoadInteger(0), False, [variable.Variable(9)]), instructions.Instruction( operation.BeginWhile("<"), [variable.Variable(9), variable.Variable(5)], False), instructions.Instruction( operation.BinaryOperation("+"), [variable.Variable(6), variable.Variable(1)], [variable.Variable(10)]), instructions.Instruction( operation.Copy(), [variable.Variable(6), variable.Variable(10)]), instructions.Instruction( operation.BinaryOperation("+"), [variable.Variable(9), variable.Variable(1)], [variable.Variable(11)]), instructions.Instruction( operation.Copy(), [variable.Variable(6), variable.Variable(10)]), instructions.Instruction(operation.EndWhile(), False, False), instructions.Instruction(operation.BeginElse(), False, False), instructions.Instruction(operation.LoadInteger(0), False, [variable.Variable(9)]), instructions.Instruction( operation.BeginWhile("<"), [variable.Variable(9), variable.Variable(5)], False), instructions.Instruction( operation.BinaryOperation("+"), [variable.Variable(7), variable.Variable(1)], [variable.Variable(10)]), instructions.Instruction( operation.Copy(), [variable.Variable(7), variable.Variable(10)]), instructions.Instruction( operation.BinaryOperation("+"), [variable.Variable(9), variable.Variable(1)], [variable.Variable(11)]), instructions.Instruction( operation.Copy(), [variable.Variable(6), variable.Variable(10)]), instructions.Instruction(operation.EndWhile(), False, False), instructions.Instruction(operation.EndIf(), False, False), instructions.Instruction(operation.EndFor(), False, False), instructions.Instruction(operation.LoadInteger(1), False, [variable.Variable(90)]), ]) # print prog l = Lifter(prog) l.doLifting() print l.emitter