diff --git a/user-side-compiler/middle/compile-node-to-ir.lisp b/user-side-compiler/middle/compile-node-to-ir.lisp index ebbbb41..3e78bc6 100644 --- a/user-side-compiler/middle/compile-node-to-ir.lisp +++ b/user-side-compiler/middle/compile-node-to-ir.lisp @@ -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)