Stateful assembler like Guile, hope to extend to interface for compiler
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
(define-module (scmvm debugger)
|
||||
#:use-module (scmvm assembler)
|
||||
#:use-module (scmvm language assembler)
|
||||
#:use-module (scmvm vm)
|
||||
#:use-module (srfi srfi-1)
|
||||
#:use-module (srfi srfi-9)
|
||||
@@ -23,12 +23,12 @@
|
||||
(continuation debugger-continuation debugger-continuation-set!)
|
||||
(stepping debugger-stepping? debugger-stepping-set!))
|
||||
|
||||
(define (make-breakpoints labels)
|
||||
(define (make-breakpoints asm)
|
||||
(define the-breakpoints '())
|
||||
(define (->index index/label)
|
||||
(if (number? index/label)
|
||||
index/label
|
||||
(assq-ref labels index/label)))
|
||||
(car (hash-ref (assembler-labels asm) index/label))))
|
||||
(define-syntax-rule (ilambda (i) e ...)
|
||||
(lambda (v) (let ([i (->index v)]) e ...)))
|
||||
(match-lambda
|
||||
@@ -44,11 +44,11 @@
|
||||
(ilambda (i) (assq-ref the-breakpoints i))]))
|
||||
|
||||
(define (make-debugger* source)
|
||||
(define-values (prgm symbols)
|
||||
(define-values (prgm asm)
|
||||
(call-with-values open-bytevector-output-port
|
||||
(lambda (port get-bv)
|
||||
(define symbols (assemble source port))
|
||||
(values (get-bv) symbols))))
|
||||
(define asm (assemble source port))
|
||||
(values (get-bv) asm))))
|
||||
(define the-debugger #f)
|
||||
(define (debug)
|
||||
(shift k
|
||||
@@ -58,7 +58,7 @@
|
||||
(k))))
|
||||
(define vm (make-vm #:debugger debug))
|
||||
(vm-load-program! vm prgm)
|
||||
(set! the-debugger (make-debugger vm source (make-breakpoints symbols) #f #f))
|
||||
(set! the-debugger (make-debugger vm source (make-breakpoints asm) #f #f))
|
||||
(debugger-breakpoint-add! the-debugger 1)
|
||||
(reset (run-vm vm))
|
||||
the-debugger)
|
||||
|
||||
Reference in New Issue
Block a user