File: allocation.scm

package info (click to toggle)
scheme48 1.9.2-1
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 18,232 kB
  • sloc: lisp: 88,907; ansic: 87,519; sh: 3,224; makefile: 771
file content (39 lines) | stat: -rw-r--r-- 1,285 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
; Part of Scheme 48 1.9.  See file COPYING for notices and license.

; Authors: David Frese, Marcus Crestani, Mike Sperber

; Interface to the VM for allocation

;; Everything else is defined via bibop-gc-external

;; For allocation done outside the VM.

(define (allocate-stob weak? type size unmovable?)
  (let* ((traced? (< type least-b-vector-type))
	 (length-in-bytes (if traced?
			      (cells->bytes size)
			      size))
	 (needed (+ length-in-bytes (cells->bytes stob-overhead)))
	 (thing (if weak?
		    (s48-allocate-weak+gc needed)
		    (if traced?
			(if unmovable?
			    (s48-allocate-traced-unmovable+gc needed)
			    (s48-allocate-traced+gc needed))
			(if unmovable?
			    (s48-allocate-untraced-unmovable+gc needed)
			    (s48-allocate-untraced+gc needed))))))
    (if (null-address? thing)
	(error "insufficient heap space for external allocation"))
    (store! thing (make-header type length-in-bytes))
    (address->stob-descriptor (address+ thing
                                        (cells->bytes stob-overhead)))))

(define (s48-allocate-stob type size)
  (allocate-stob #f type size #f))

(define (s48-allocate-weak-stob type size)
  (allocate-stob #t type size #f))

(define (s48-allocate-unmovable-stob type size)
  (allocate-stob #f type size #t))