Updated FrTime

Created the MzTake language and updated sine demo to reflect it.

svn: r127
This commit is contained in:
Jono Spiro 2004-08-03 21:25:04 +00:00
parent 17d72dcfe6
commit 1fc5e1efea
5 changed files with 772 additions and 668 deletions

View File

@ -1,11 +1,30 @@
; ;
; ;; ;; ;;;;;;;;; ; ;
; ;; ;; ; ; ;
; ; ; ; ; ; ; ;
; ; ; ; ; ;;;;;; ; ;;;; ; ; ;;; ; ;;;; ; ;;;; ;;;;;;
; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;; ; ; ;
; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;
; ; ; ; ; ; ; ;;;;; ; ; ; ; ; ;;;;; ; ; ; ;
; ; ; ; ; ; ; ; ; ;;; ;;;;;;; ; ; ; ; ; ; ;
; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;
; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;
; ; ; ; ; ; ;; ; ; ; ; ; ; ;; ; ; ; ;;
; ; ; ;;;;;; ; ;;;; ; ; ; ;;;; ;;;;;;; ;;;; ; ; ; ;;;; ;
; ;
; ; ;
; ;;;;
(module debugger-tool mzscheme
(require (lib "contract.ss")
(lib "tool.ss" "drscheme")
(lib "mred.ss" "mred")
(lib "framework.ss" "framework")
(lib "unitsig.ss")
(require (lib "etc.ss")
(lib "list.ss")
(lib "class.ss")
(lib "list.ss"))
(lib "unitsig.ss")
(lib "contract.ss")
(lib "mred.ss" "mred")
(lib "tool.ss" "drscheme")
(lib "framework.ss" "framework")
(lib "string-constant.ss" "string-constants"))
(provide tool@)
@ -13,8 +32,87 @@
(unit/sig drscheme:tool-exports^
(import drscheme:tool^)
;############################MZTAKE LANGUAGE RELATED FUNCTIONS##############################################
(define (phase1) (void))
(define (phase2) (void))
(define (phase2)
(drscheme:language-configuration:add-language
(make-object ((drscheme:language:get-default-mixin) (make-mztake-language mztake-language%)))))
(define (make-mztake-language base)
(class (drscheme:language:module-based-language->language-mixin
(drscheme:language:simple-module-based-language->module-based-language-mixin
base))
(field (watch-list empty))
(rename [super-on-execute on-execute])
(inherit get-language-position)
(define/override (on-execute settings run-in-user-thread)
(let ([drs-eventspace (current-eventspace)])
(super-on-execute settings run-in-user-thread)
(run-in-user-thread
(lambda ()
(let ([new-watch (namespace-variable-value 'render)]
[set-evspc (namespace-variable-value 'set-eventspace)])
(set-evspc drs-eventspace)
(set! watch-list
((if (weak-member new-watch watch-list)
identity
(lambda (r) (cons (make-weak-box new-watch) r)))
(filter weak-box-value watch-list))))))))
(rename (super:render-value/format render-value/format)
(super:render-value render-value))
(override render-value/format render-value)
(define (render-value/format value settings port put-snip width)
(super:render-value/format (watch watch-list value put-snip)
settings port put-snip width))
(define (render-value value settings port put-snip)
(super:render-value (watch watch-list value put-snip)
settings port put-snip))
(define/override (use-namespace-require/copy?) #t)
(super-instantiate ())))
(define mztake-language%
(class* object% (drscheme:language:simple-module-based-language<%>)
(define/public (get-language-numbers)
'(1000 -400))
(define/public (get-language-position)
(list (string-constant experimental-languages) "MzTake"))
(define/public (get-module)
'(lib "mztake-syntax.ss" "mztake"))
(define/public (get-one-line-summary)
"MzTake Debugger")
(define/public (get-language-url) #f)
(define/public (get-reader)
(lambda (name port offsets)
(let ([v (read-syntax name port offsets)])
(if (eof-object? v)
v
(namespace-syntax-introduce v)))))
(super-instantiate ())))
;;;;;;;;;;;;;FRTIME REPL STUFF;;;;;;;;;;;;;;;;;;;;;;
(define (weak-member obj lis)
(let ([cmp (lambda (v) (eq? v obj))])
(let loop ([lis lis])
(and (cons? lis)
(or
(cond
[(weak-box-value (first lis)) => cmp]
[else false])
(loop (rest lis)))))))
(define (watch watch-list value as-snip?)
(foldl
(lambda (wb acc)
(cond
[(weak-box-value wb)
=> (lambda (f) (f acc as-snip?))]
[else acc]))
value
watch-list))
;###########################################################################################################
(define debugger-bitmap
(drscheme:unit:make-bitmap

View File

@ -1,48 +1,39 @@
#|
(debugger
(processes (p ("sine.ss" [sin/x 5 8 bind '(sin-x x)]
[foo 10 20 bind '(sin-x x)])
("sine-extra.ss")))
(define sin/x (hold sin/x))
(define x (+ 200 (second sin/x)))
(print-b "x:" x))
*** translates to ***
(define p (create-debug-process))
(define-values (sin/x foo ...)(
(let ([tmp (create-debug-client p "sine.ss")])
(values (create-trace tmp 5 8 'bind '(sin-x x))))
...
(start/resume <temp1>)
...
|#
(module mztake-syntax (lib "frtime-big.ss" "frtime")
(define-syntax debugger-module-begin
(syntax-rules (debugger)
[(_ (debugger . clauses))
(#%module-begin (debugger . clauses))]))
(define-syntax debugger
(syntax-rules (processes)
[(_ (processes (proc-id (client (trace line col cmd . args) ...))
...)
expr ...)
(begin
(define proc-id (create-debug-process))
...
(define-values (trace ...)
(let ([tmp (create-debug-client proc-id client)])
(values
(create-trace line col 'cmd . args)
...)))
...
expr
...)]))
(provide debugger
(rename debugger-module-begin #%module-begin)
(all-from-except (lib "frtime-big.ss" "frtime") #%module-begin)))
#|
(debug-process p ("sine.ss" [sin/x 5 8 bind '(sin-x x)]
[foo 10 20 bind '(sin-x x)])
("sine-extra.ss"))
(define sin/x (hold sin/x))
(define x (+ 200 (second sin/x)))
(print-b "x:" x)
*** translates to ***
(define p (create-debug-process))
(define-values (sin/x foo ...)(
(let ([tmp (create-debug-client p "sine.ss")])
(values (create-trace tmp 5 8 'bind '(sin-x x))))
...
|#
(module mztake-syntax (lib "frtime-big.ss" "frtime")
(require (lib "mztake.ss" "mztake")
(lib "useful-code.ss" "mztake/private"))
(define-syntax debug-process
(syntax-rules (debug-process)
[(debug-process proc-id (client (trace line col cmd . args) ...) ...)
(begin
(define proc-id (create-debug-process))
(begin
(define-values (trace ...)
(let ([tmp (create-debug-client proc-id 'client)])
(values
(create-trace tmp line col 'cmd . args)
...))) ...))]))
(provide debug-process
(all-from-except (lib "frtime-big.ss" "frtime") #%module-begin)
(all-from (lib "mztake.ss" "mztake"))
(all-from (lib "useful-code.ss" "mztake/private"))))

File diff suppressed because it is too large Load Diff

View File

@ -1,7 +1,7 @@
(module more-useful-code mzscheme
(require (lib "list.ss")
(lib "pretty.ss")
(lib "etc.ss"))
(lib "etc.ss"))
(provide assert
cons-to-end

View File

@ -23,9 +23,8 @@
(define (sequence-match? seq evs)
(equal? seq (history-b (length seq) evs)))
; Reaaaalllly cheap print function
(define (print-b str b)
(format "~a ~a" str b))
; Cheap printf for behaviors
(define printf-b format)
; Flattens a list
(define (flatten x)
@ -33,4 +32,4 @@
((and (list? x)
(list? (first x)))
(append (flatten (car x)) (flatten (cdr x))))
(else (list x)))))
(else (list x)))))