Use a custom implementation of promises.
Saves 43 definitions and 397 lines of (de)compiled code.
This commit is contained in:
parent
61f59a2476
commit
b6a3f40bd9
22
racket/src/expander/common/promise.rkt
Normal file
22
racket/src/expander/common/promise.rkt
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
#lang racket/base
|
||||||
|
|
||||||
|
(provide delay force)
|
||||||
|
;; This version of promises does _not_ handle re-entrance detection,
|
||||||
|
;; exceptions, or multiple value returns.
|
||||||
|
|
||||||
|
;; val is a thunk or the eventual value
|
||||||
|
;; status is whether the thunk has been forced already
|
||||||
|
(struct promise (val status) #:mutable #:authentic)
|
||||||
|
|
||||||
|
(define-syntax-rule (delay e) (promise (lambda () e) #f))
|
||||||
|
|
||||||
|
(define (force v)
|
||||||
|
(cond [(promise? v)
|
||||||
|
(define s (promise-status v))
|
||||||
|
(cond [(not s)
|
||||||
|
(define result ((promise-val v)))
|
||||||
|
(set-promise-val! v result)
|
||||||
|
(set-promise-status! v #t)
|
||||||
|
result]
|
||||||
|
[else (promise-val v)])]
|
||||||
|
[else v]))
|
|
@ -1,5 +1,5 @@
|
||||||
#lang racket/base
|
#lang racket/base
|
||||||
(require racket/promise
|
(require "../common/promise.rkt"
|
||||||
"../common/performance.rkt"
|
"../common/performance.rkt"
|
||||||
"../namespace/namespace.rkt"
|
"../namespace/namespace.rkt"
|
||||||
"../namespace/module.rkt"
|
"../namespace/module.rkt"
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
#lang racket/base
|
#lang racket/base
|
||||||
(require racket/promise
|
(require "../common/promise.rkt"
|
||||||
"../common/struct-star.rkt"
|
"../common/struct-star.rkt"
|
||||||
"../syntax/syntax.rkt"
|
"../syntax/syntax.rkt"
|
||||||
"../syntax/scope.rkt"
|
"../syntax/scope.rkt"
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
#lang racket/base
|
#lang racket/base
|
||||||
(require racket/promise
|
(require "../common/promise.rkt"
|
||||||
"../common/struct-star.rkt"
|
"../common/struct-star.rkt"
|
||||||
"../common/performance.rkt"
|
"../common/performance.rkt"
|
||||||
"../syntax/syntax.rkt"
|
"../syntax/syntax.rkt"
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
#lang racket/base
|
#lang racket/base
|
||||||
(require racket/promise
|
(require "../common/promise.rkt"
|
||||||
"../common/phase.rkt"
|
"../common/phase.rkt"
|
||||||
"../common/small-hash.rkt"
|
"../common/small-hash.rkt"
|
||||||
"../syntax/bulk-binding.rkt"
|
"../syntax/bulk-binding.rkt"
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user