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
|
||||
(require racket/promise
|
||||
(require "../common/promise.rkt"
|
||||
"../common/performance.rkt"
|
||||
"../namespace/namespace.rkt"
|
||||
"../namespace/module.rkt"
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
#lang racket/base
|
||||
(require racket/promise
|
||||
(require "../common/promise.rkt"
|
||||
"../common/struct-star.rkt"
|
||||
"../syntax/syntax.rkt"
|
||||
"../syntax/scope.rkt"
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
#lang racket/base
|
||||
(require racket/promise
|
||||
(require "../common/promise.rkt"
|
||||
"../common/struct-star.rkt"
|
||||
"../common/performance.rkt"
|
||||
"../syntax/syntax.rkt"
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
#lang racket/base
|
||||
(require racket/promise
|
||||
(require "../common/promise.rkt"
|
||||
"../common/phase.rkt"
|
||||
"../common/small-hash.rkt"
|
||||
"../syntax/bulk-binding.rkt"
|
||||
|
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user