correcting pre-emption.
This commit is contained in:
parent
6642cdcff7
commit
920f7cf85f
|
@ -31,11 +31,11 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
(: assemble/write-invoke ((Listof Statement) Boolean Output-Port -> Void))
|
(: assemble/write-invoke ((Listof Statement) Output-Port (U 'no-trampoline 'without-preemption 'with-preemption) -> Void))
|
||||||
;; Writes out the JavaScript code that represents the anonymous invocation expression.
|
;; Writes out the JavaScript code that represents the anonymous invocation expression.
|
||||||
;; What's emitted is a function expression that, when invoked, runs the
|
;; What's emitted is a function expression that, when invoked, runs the
|
||||||
;; statements.
|
;; statements.
|
||||||
(define (assemble/write-invoke stmts without-trampoline? op)
|
(define (assemble/write-invoke stmts op trampoline-option)
|
||||||
(parameterize ([current-interned-symbol-table ((inst make-hash Symbol Symbol))]
|
(parameterize ([current-interned-symbol-table ((inst make-hash Symbol Symbol))]
|
||||||
[current-interned-constant-closure-table ((inst make-hash Symbol MakeCompiledProcedure))])
|
[current-interned-constant-closure-table ((inst make-hash Symbol MakeCompiledProcedure))])
|
||||||
(display "(function(M, success, fail, params) {\n" op)
|
(display "(function(M, success, fail, params) {\n" op)
|
||||||
|
@ -73,14 +73,18 @@ for (param in params) {
|
||||||
}
|
}
|
||||||
EOF
|
EOF
|
||||||
op)
|
op)
|
||||||
(cond [without-trampoline?
|
(cond [(eq? trampoline-option 'no-trampoline)
|
||||||
;; If it's a module statement, we just want to call it directly, to get things loaded.
|
;; If it's a module statement, we just want to call it directly, to get things loaded.
|
||||||
(fprintf op "~a(M); })"
|
(fprintf op "~a(M); })"
|
||||||
(assemble-label (make-Label (BasicBlock-name (first basic-blocks)))))]
|
(assemble-label (make-Label (BasicBlock-name (first basic-blocks)))))]
|
||||||
[else
|
[else
|
||||||
;; Otherwise, we want to run under a trampolining context.
|
;; Otherwise, we want to run under a trampolining context.
|
||||||
(fprintf op "M.trampoline(~a, true); })"
|
(fprintf op "M.trampoline(~a, ~a); })"
|
||||||
(assemble-label (make-Label (BasicBlock-name (first basic-blocks)))))])))
|
(assemble-label (make-Label (BasicBlock-name (first basic-blocks))))
|
||||||
|
(cond [(eq? trampoline-option 'with-preemption)
|
||||||
|
"false"]
|
||||||
|
[(eq? trampoline-option 'without-preemption)
|
||||||
|
"true"]))])))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -76,7 +76,7 @@
|
||||||
(define compiled-bytecode (compile-for-repl whalesong-bytecode))
|
(define compiled-bytecode (compile-for-repl whalesong-bytecode))
|
||||||
(pretty-print compiled-bytecode)
|
(pretty-print compiled-bytecode)
|
||||||
(define assembled-op (open-output-string))
|
(define assembled-op (open-output-string))
|
||||||
(define assembled (assemble/write-invoke compiled-bytecode #f assembled-op))
|
(define assembled (assemble/write-invoke compiled-bytecode assembled-op 'with-preemption))
|
||||||
(cons (get-output-string assembled-op) (loop))])))
|
(cons (get-output-string assembled-op) (loop))])))
|
||||||
(printf "assembled codes ~a\n" assembled-codes)
|
(printf "assembled codes ~a\n" assembled-codes)
|
||||||
(write-json (hash 'compiledCodes assembled-codes)
|
(write-json (hash 'compiledCodes assembled-codes)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user