Include source information in some IR nodes

This commit is contained in:
John Lorentzson 2025-07-29 18:57:22 +02:00
parent 5306188869
commit 04df970b3a

View file

@ -41,7 +41,8 @@
(build-insert (make-instance 'ir-call
:callee (callee node)
:inputs inputs
:output output)
:output output
:source (source node))
builder)
output))
@ -50,7 +51,8 @@
(output (make-instance 'ir-result)))
(build-insert (make-instance (get-ir-expr-inst-type node)
:inputs inputs
:output output)
:output output
:source (source node))
builder)
output))
@ -61,11 +63,17 @@
(let ((input (compile-node (value node) builder))
(output-var (find-variable (dst-variable node) builder))
(output (make-instance 'ir-result)))
(build-insert (make-instance 'ir-assign :input input :output output-var) builder)
(build-insert (make-instance 'ir-assign :input input
:output output-var
:source (source node))
builder)
;; This second instruction is so that we can let an assignment return
;; the value that was assigned, as in b = a = 1. If the assignment is not
;; used in this way, dead code elimination will remove this fetch.
(build-insert (make-instance 'ir-fetchvar :input output-var :output output) builder)
(build-insert (make-instance 'ir-fetchvar :input output-var
:output output
:source (source node))
builder)
output))
(defmethod compile-node ((node node-conditional) builder)
@ -79,7 +87,8 @@
(build-insert-end (make-instance
'ir-if
:input test-ir
:destinations (list then-iblock else-iblock))
:destinations (list then-iblock else-iblock)
:source (source node))
builder)
(build-begin builder then-iblock)
(compile-node (then-node node) builder)