]> git.tdb.fi Git - libs/gl.git/blobdiff - source/programcompiler.cpp
Retain assignment location when moving out variables to global scope
[libs/gl.git] / source / programcompiler.cpp
index bb77e0ea911e205c192c68cd88462f6affdf1ff6..223392ffd4d1e21a4ac599405eba6b2bb1503aba 100644 (file)
@@ -989,7 +989,7 @@ bool ProgramCompiler::InterfaceGenerator::generate_interface(VariableDeclaration
        return true;
 }
 
-void ProgramCompiler::InterfaceGenerator::insert_assignment(const string &left, ProgramSyntax::Expression *right)
+ExpressionStatement &ProgramCompiler::InterfaceGenerator::insert_assignment(const string &left, ProgramSyntax::Expression *right)
 {
        Assignment *assign = new Assignment;
        VariableReference *ref = new VariableReference;
@@ -1002,6 +1002,8 @@ void ProgramCompiler::InterfaceGenerator::insert_assignment(const string &left,
        stmt->expression = assign;
        stmt->visit(*this);
        insert_nodes.push_back(stmt);
+
+       return *stmt;
 }
 
 void ProgramCompiler::InterfaceGenerator::visit(VariableReference &var)
@@ -1033,7 +1035,9 @@ void ProgramCompiler::InterfaceGenerator::visit(VariableDeclaration &var)
                        remove_node = true;
                        if(var.init_expression)
                        {
-                               insert_assignment(var.name, var.init_expression->clone());
+                               ExpressionStatement &stmt = insert_assignment(var.name, var.init_expression->clone());
+                               stmt.source = var.source;
+                               stmt.line = var.line;
                                return;
                        }
                }