This repository has been archived on 2022-08-10. You can view files and clone it, but cannot push or open issues or pull requests.
chez-openbsd/s/types.ss
2022-07-29 15:12:07 +02:00

112 lines
4.2 KiB
Scheme

;;; types.ss
;;; Copyright 1984-2017 Cisco Systems, Inc.
;;;
;;; Licensed under the Apache License, Version 2.0 (the "License");
;;; you may not use this file except in compliance with the License.
;;; You may obtain a copy of the License at
;;;
;;; http://www.apache.org/licenses/LICENSE-2.0
;;;
;;; Unless required by applicable law or agreed to in writing, software
;;; distributed under the License is distributed on an "AS IS" BASIS,
;;; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
;;; See the License for the specific language governing permissions and
;;; limitations under the License.
;;; annotation fields are mutable so that the reader can handle
;;; cycles involving annotated data
(define-record-type annotation
(fields (mutable expression) (mutable source) (mutable stripped) (mutable flags))
(nongenerative #{annotation bc6o9md359cw9ds5-b})
(sealed #t)
(protocol
(lambda (new)
(case-lambda
[(expression source stripped) (new expression source stripped (fxlogor (constant annotation-debug) (constant annotation-profile)))]
[(expression source stripped flags) (new expression source stripped flags)]))))
(define-record-type source
(fields (immutable sfd) (immutable bfp) (immutable efp))
(nongenerative #{source gbwctw0mahurbuiegp7uq3-0}))
(define-record-type source-2d
(parent source)
(fields (immutable line) (immutable column))
(nongenerative #{source-2d gbwctw0mahurbuiegp7uq3-2})
(sealed #t))
(define-record-type source-file-descriptor
(fields (immutable name) (immutable length) (immutable crc))
(nongenerative #{source-file-descriptor bdbv4s3hk5ja7rql-a})
(sealed #t))
(define-record-type syntax-object
(fields (immutable expression) (immutable wrap))
(nongenerative #{syntax-object bdehkef6almh6ypb-a})
(sealed #t))
(define-syntax syntax-object-rtd
(identifier-syntax (type-descriptor syntax-object)))
(define-record-type code-info
(fields
(immutable src)
(immutable sexpr)
(immutable free) ; vector of elts, elt = symbols #f
(immutable live) ; vector of pairs each mapping a symbol or pair of symbols to an index
(immutable rpis)) ; vector of rp-infos
(nongenerative #{code-info gr886ae7iuw4wt9ft4vxym-2})
(sealed #t))
(define-record-type rp-info
(fields (immutable offset) (immutable src) (immutable sexpr) (immutable mask))
(nongenerative #{rp-info gr886ae7iuw4wt9ft4vxym-1})
(sealed #t))
(define cpsymbol '#{closure cedozdf6uqtmcjjt-2})
; block profiling record
(define-record-type rblock
(fields (immutable srecs) (immutable op))
(nongenerative #{rblock bt50nyec0orotoeb-0})
(sealed #t))
(define-record-type static-closure-info
(nongenerative #{static-closure-info cv84l52b3ghjjuqa-0})
(sealed #t)
(fields
(mutable raw-closure-count)
(mutable raw-free-var-count)
(mutable wk-borrowed-count)
(mutable wk-empty-count)
(mutable wk-single-count)
(mutable wk-pair-count)
(mutable wk-vector-count)
(mutable wk-vector-free-var-count)
(mutable nwk-empty-count)
(mutable nwk-closure-count)
(mutable nwk-closure-free-var-count))
(protocol
(lambda (new)
(lambda ()
(new 0 0 0 0 0 0 0 0 0 0 0)))))
#;(define-record-type profile-counter
(fields (mutable uptr count)) ; sadly, can't specify the type
(nongenerative #{profile-counter b5vnnom9h4o4uny0-2})
(sealed #t)
(protocol (lambda (new) (lambda () (new 0)))))
(let-syntax ([a (lambda (x)
(syntax-case x ()
[(_ profile-counter? make-profile-counter profile-counter-count profile-counter-count-set!)
(let ([rtd ($make-record-type #!base-rtd #f
'#{profile-counter b5vnnom9h4o4uny0-2}
'((mutable uptr count))
#t #f)])
#`(begin
(define make-profile-counter (record-constructor '#,rtd))
(define profile-counter? (record-predicate '#,rtd))
(define profile-counter-count (record-accessor '#,rtd 0))
(define profile-counter-count-set! (record-mutator '#,rtd 0))))]))])
(a profile-counter? make-profile-counter profile-counter-count profile-counter-count-set!))