Пример #1
0
class Debugger():
    
    def __init__(self):
        self.vm = VM()
        self.vm.add_hook(DebugHooks.PreInstruction, self.pre_instruction_hook)
        self.vm.add_hook(DebugHooks.PreMethod, self.pre_method_hook)
        self.vm.add_hook(DebugHooks.PostMethod, self.post_method_hook)
                
    def pre_instruction_hook(self, instruction):
        print instruction.label + ':\t' + instruction.name
        self.handle_input()
    
    def pre_method_hook(self, method):
        print 'Entered method ' + method.methodDefinition.namespace + '::' + method.methodDefinition.name
        
    def post_method_hook(self, method):
        print 'Exited method ' + method.methodDefinition.namespace + '::' + method.methodDefinition.name
        
    def handle_input(self):
        while True:
            r = raw_input('> ')
            if r == 's':
                for item in reversed(self.vm.stack.stack):
                    print item
            elif r == 'q':
                exit()
            elif r == 'g':
                self.vm.remove_hook(DebugHooks.PreInstruction, self.pre_instruction_hook)
                return
            elif r == 'm':
                print 'method'
            elif r.startswith('l '):
                filename = '../tests/' + r[2:] + ".il"
                try:
                    self.vm.load(filename)
                    print 'Loaded ' + filename
                    self.vm.start()
                    print 'Execution finished'
                    print 'Return code: ' + str(self.vm.stack.pop())
                    return
                except IOError:
                    print 'Unable to load file'
                except Exception as e:
                    print 'Error: ' + str(e)
                    traceback.print_exc(file=sys.stdout)

            else:
                return
            
    def start(self):
        while True:
            self.handle_input()
Пример #2
0
class Debugger():
    def __init__(self):
        self.vm = VM()
        self.vm.add_hook(DebugHooks.PreInstruction, self.pre_instruction_hook)
        self.vm.add_hook(DebugHooks.PreMethod, self.pre_method_hook)
        self.vm.add_hook(DebugHooks.PostMethod, self.post_method_hook)

    def pre_instruction_hook(self, instruction):
        print instruction.label + ':\t' + instruction.name
        self.handle_input()

    def pre_method_hook(self, method):
        print 'Entered method ' + method.methodDefinition.namespace + '::' + method.methodDefinition.name

    def post_method_hook(self, method):
        print 'Exited method ' + method.methodDefinition.namespace + '::' + method.methodDefinition.name

    def handle_input(self):
        while True:
            r = raw_input('> ')
            if r == 's':
                for item in reversed(self.vm.stack.stack):
                    print item
            elif r == 'q':
                exit()
            elif r == 'g':
                self.vm.remove_hook(DebugHooks.PreInstruction,
                                    self.pre_instruction_hook)
                return
            elif r == 'm':
                print 'method'
            elif r.startswith('l '):
                filename = '../tests/' + r[2:] + ".il"
                try:
                    self.vm.load(filename)
                    print 'Loaded ' + filename
                    self.vm.start()
                    print 'Execution finished'
                    print 'Return code: ' + str(self.vm.stack.pop())
                    return
                except IOError:
                    print 'Unable to load file'
                except Exception as e:
                    print 'Error: ' + str(e)
                    traceback.print_exc(file=sys.stdout)

            else:
                return

    def start(self):
        while True:
            self.handle_input()
Пример #3
0
from VM import VM

if __name__ == '__main__':
    vm = VM()
    vm.load('scripts/test3.tis')
    # vm.load('scripts/signal_edge_detector.tis')
    # vm.load('scripts/mov_04.tis')
    vm.run()
    vm.compare_io()
Пример #4
0
 def run_test(self, fileName):
     vm = VM()
     file = os.getcwd() + '/tests/' +  fileName
     vm.load(file)
     vm.start()
     return vm.stack.pop()