Use a custom implementation of promises.

Saves 43 definitions and 397 lines of (de)compiled code.
This commit is contained in:
Sam Tobin-Hochstadt 2018-06-15 17:20:52 -04:00
parent 61f59a2476
commit b6a3f40bd9
6 changed files with 3383 additions and 3780 deletions

View 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]))

View File

@ -1,5 +1,5 @@
#lang racket/base
(require racket/promise
(require "../common/promise.rkt"
"../common/performance.rkt"
"../namespace/namespace.rkt"
"../namespace/module.rkt"

View File

@ -1,5 +1,5 @@
#lang racket/base
(require racket/promise
(require "../common/promise.rkt"
"../common/struct-star.rkt"
"../syntax/syntax.rkt"
"../syntax/scope.rkt"

View File

@ -1,5 +1,5 @@
#lang racket/base
(require racket/promise
(require "../common/promise.rkt"
"../common/struct-star.rkt"
"../common/performance.rkt"
"../syntax/syntax.rkt"

View File

@ -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