def test_invalid_bytecode(self): lexer = LexerStateMachine('int x = 5; if(x==5){x=6;}else{x=7;}', self.context) parser = Parser(lexer, self.manager) self.manager.setParser(parser) token = parser.parseStatements(0) bytecodes = self.generator.generateCode(token) vm = VirtualMachine() vm.VMLoad(bytecodes) lexer = LexerStateMachine('x = x +5;', self.context) parser.lexer = lexer token = parser.parseStatements(0) bytecodes = self.generator.generateCode(token) cbytecodes = vm.convertToCArray(bytecodes) vm.dumpBytecodes(cbytecodes)
def test_VMStep(self): bytecode = [] bytecode.append(ByteCodeGenerator.dumpRegisterHex(None, [7])) # hacked bytecode to display r7 value bytecode.append(ByteCodeGenerator.dumpRegisterHex(None, [7])) # bytecode.append(ByteCodeGenerator.halt(None)) vm = VirtualMachine() cbytecodes = vm.convertToCArray(bytecode) cCharArray_t = c_char * 300 cCharArray = cCharArray_t(0) cPtr = c_char_p cPtr = cCharArray vm.dumpBytecodes(bytecode) vm.dumpBytecode(bytecode[0]) vm.dumpBytecode(bytecode[1]) vm.dumpBytecode(bytecode[2])
generator = GeneratorAPI(context, contextManager) byteCodeGenerator = ByteCodeGenerator(context, contextManager) informationInjector = InformationInjector() vm = VirtualMachine() parser = Parser(None, contextManager) contextManager.setParser(parser) print('Imba the Cinterpreter') while(1): stopSymbol = ' ' StringCode = '' print('> ', end="") for statement in iter(input, stopSymbol): StringCode = StringCode + '\n' +statement print('> ', end="") StringList = StringCode.split('\n') lexer = LexerStateMachine(StringCode, context) parser.lexer = lexer tokenList = [] try: token = parser.parseStatements(0) byteCodes = generator.generateCode(token) # to halt the VM cbytecode = vm.convertToCArray(byteCodes) vm.dumpBytecodes(cbytecode) vm.VMRun(cbytecode) except SyntaxError as e: print(e.msg)