From 1daa593a036a472b491f129dd1910ef97d8d9cfb Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Mon, 27 Jan 2020 21:18:49 -0500 Subject: [PATCH] Emit label for globals --- scheme/cyclone/cgen.sld | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/scheme/cyclone/cgen.sld b/scheme/cyclone/cgen.sld index f66d9ad2..285771cd 100644 --- a/scheme/cyclone/cgen.sld +++ b/scheme/cyclone/cgen.sld @@ -999,17 +999,20 @@ (c-args* (if (prim:arg-count? fun) (c:append (c-code num-args-str) c-args) c-args))) -;; TODO: emit mangled sym as first arg to set-global! (what about unsafe version?). -;; This also means we need to pass the symbol to add_global, store it somewhere in memory, and add_symbol prior to calling add_global -(when (eq? 'set-global! fun) - (let* ((ident (cadr args)) - (mangled (cgen:mangle-global ident)) - (mangled-sym (string-append "quote_" mangled)) - ) - (trace:debug `(JAE set-global args are ,c-args ,args mangled ,mangled-sym)) - )) -;; Example c-args: -;;("quote__121pare_125, __glo__121pare_125, r_73558_731010_731308_731412" () 3 ("quote__121pare_125" () 0) ("__glo__121pare_125" ()) ("r_73558_731010_731308_731412" ())) + ;; Emit symbol when mutating global variables, so we can look + ;; up the cvar + (when (eq? 'set-global! fun) + (let* ((ident (cadr args)) + (mangled (string-append "\"" (cgen:mangle-global ident) "\"")) + (all-args (string-split (car c-args) #\,)) + (new-all-args (string-join (cons mangled (cdr all-args)) ",")) + ) + (set-car! c-args* new-all-args) + (set-car! (cadddr c-args*) mangled) + ;(trace:debug `(JAE set-global args are ,c-args ,args mangled )) + ;; Example c-args: + ;;("quote__121pare_125, __glo__121pare_125, r_73558_731010_731308_731412" () 3 ("quote__121pare_125" () 0) ("__glo__121pare_125" ()) ("r_73558_731010_731308_731412" ())) + )) (if (prim/cvar? fun) ;; Args need to go with alloc function