From 0e8129f5e6e5fd1821337085ef0423ab1b5ffe35 Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Wed, 16 Dec 2015 22:54:34 -0500 Subject: [PATCH] Added thread stubs --- scheme/base.sld | 36 ++++++++++++++++++++++++++++++++---- 1 file changed, 32 insertions(+), 4 deletions(-) diff --git a/scheme/base.sld b/scheme/base.sld index a86286f1..85c7857a 100644 --- a/scheme/base.sld +++ b/scheme/base.sld @@ -1,7 +1,12 @@ (define-library (scheme base) (export ;; Thread functions. these are not standard, and may be relocated + thread? make-thread + thread-name + thread-specific + thread-specific-set! + ;thread-start! ;; END threads ; TODO: need filter for the next two. also, they really belong in SRFI-1, not here ;delete @@ -99,11 +104,34 @@ ) (begin ;; Threading + (define (thread? obj) + (and (vector? obj) + (> (vector-length obj) 0) + (equal? 'cyc-thread-obj (vector-ref obj 0)))) + (define (make-thread thunk . name) - (let ((name-str (if (pair? name) - (car name) - ""))) - (list 'cyc-thread-obj thunk name-str))) +; (let ((name-str (if (pair? name) +; (car name) +; ""))) + ;; Fields supported so far: + ;; - type marker (implementation-specific) + ;; - thunk + ;; - internal thread id (implementation-specific) + ;; - name + ;; - specific + (vector 'cyc-thread-obj thunk #f name #f)) +; (vector 'cyc-thread-obj thunk #f 'name-str #f))) + + (define (thread-name t) (vector-ref t 3)) + (define (thread-specific t) (vector-ref t 4)) + (define (thread-specific-set! t obj) (vector-set! t 4 obj)) + +; TODO: +; current-thread - not sure how to look this up yet... may need a global list of running threads +; (define (thread-start! t) +; (let* ((thunk (vector-ref t 1)) +; (mutator-id (Cyc-thread-start! thunk))) +; (vector-set! t 2 mutator-id))) ;; Features implemented by this Scheme (define (features) '(cyclone r7rs exact-closed))