Skip to content

Commit 2e0a8ae

Browse files
Brute-force propagate let types upward to resolve specialization issue (#1433)
* debugging * propagate let type to subexpr * cleanup * add note --------- Co-authored-by: garlic0x1 <[email protected]>
1 parent b3ab0c4 commit 2e0a8ae

File tree

1 file changed

+14
-1
lines changed

1 file changed

+14
-1
lines changed

Diff for: src/codegen/optimizer.lisp

+14-1
Original file line numberDiff line numberDiff line change
@@ -193,6 +193,16 @@
193193
(action (:before node-let) #'add-local-funs)
194194
(action (:before node-bind) #'add-bind-fun)))))
195195

196+
;;; XXX HACK: This is a temporary hack (famous last words) to solve
197+
;;; #1390. This issue should be handled earlier.
198+
(defun %reset-let-node-type-by-subexpression! (node)
199+
;; This function overwrites a LET-NODE's type with its SUBEXPR's
200+
;; type.
201+
(when (node-let-p node)
202+
(setf (coalton-impl/codegen/ast::%node-type (node-let-subexpr node))
203+
(node-type node)))
204+
node)
205+
196206
(defun optimize-bindings-initial (bindings package env)
197207
(declare (type binding-list bindings)
198208
(type package package)
@@ -201,7 +211,10 @@
201211
(let ((hoister (make-hoister)))
202212
(append
203213
(loop :for (name . node) :in bindings
204-
:collect (cons name (static-dict-lift (optimize-node node env) name hoister package env)))
214+
:collect (cons name (%reset-let-node-type-by-subexpression!
215+
(static-dict-lift
216+
(optimize-node node env)
217+
name hoister package env))))
205218
(pop-final-hoist-point hoister))))
206219

207220
(defun optimize-node (node env)

0 commit comments

Comments
 (0)