Do not emit code with unused local C variables

This commit is contained in:
Justin Ethier 2021-03-17 22:39:16 -04:00
parent d36f0aeb64
commit 220a95e4d5

View file

@ -14,6 +14,7 @@
(scheme inexact) (scheme inexact)
(scheme write) (scheme write)
(cyclone foreign) (cyclone foreign)
(srfi 69)
(scheme cyclone primitives) (scheme cyclone primitives)
(scheme cyclone transforms) (scheme cyclone transforms)
(scheme cyclone ast) (scheme cyclone ast)
@ -44,6 +45,7 @@
(define *cgen:track-call-history* #t) (define *cgen:track-call-history* #t)
(define *cgen:use-unsafe-prims* #f) (define *cgen:use-unsafe-prims* #f)
(define *optimize-well-known-lambdas* #f) (define *optimize-well-known-lambdas* #f)
(define *ref-table* #f)
(define (emit line) (define (emit line)
(display line) (display line)
@ -1835,18 +1837,18 @@
;; Generate code to unpack args into locals w/expected names ;; Generate code to unpack args into locals w/expected names
(for-each (for-each
(lambda (scm-arg arg) (lambda (scm-arg arg)
;;(trace:error `(DEBUG ,scm-arg ARG ,arg)) ;; Do not declare unused variables
(let ((var (adb:get/default scm-arg #f))) (when (and (hash-table-ref/default
(when (and var *ref-table*
(> (adbv:ref-count var) 0) scm-arg
(not (null? (adbv:ref-by var)))) #f))
(set! cstr (string-append (set! cstr (string-append
cstr cstr
arg arg
" = args[" " = args["
(number->string i) (number->string i)
"];" "];"
)))) )))
(set! i (+ i 1))) (set! i (+ i 1)))
(if has-closure? (if has-closure?
(cdr scm-args) (cdr scm-args)
@ -1953,6 +1955,7 @@
required-libs required-libs
src-file src-file
flag-set?) flag-set?)
(set! *ref-table* (analyze:cc-ast->vars input-program)) ;; Walk input program to find used variables
(set! *global-syms* (append globals (lib:idb:ids import-db))) (set! *global-syms* (append globals (lib:idb:ids import-db)))
(set! *cgen:track-call-history* (flag-set? 'track-call-history)) (set! *cgen:track-call-history* (flag-set? 'track-call-history))
(set! *cgen:use-unsafe-prims* (flag-set? 'use-unsafe-prims)) (set! *cgen:use-unsafe-prims* (flag-set? 'use-unsafe-prims))