]> git.tdb.fi Git - libs/gl.git/blobdiff - source/glsl/optimize.cpp
Rearrange expression node replacement
[libs/gl.git] / source / glsl / optimize.cpp
index 1aad8d1b311adcecf27904b8e29efb49892d98a6..f938314814ea9cd4211279d5e94ff817c2a92fcc 100644 (file)
@@ -202,6 +202,7 @@ void FunctionInliner::visit_and_inline(RefPtr<Expression> &ptr)
                ptr = r_inline_result;
                r_any_inlined = true;
        }
+       r_inline_result = 0;
 }
 
 void FunctionInliner::visit(Block &block)
@@ -218,20 +219,17 @@ void FunctionInliner::visit(Block &block)
 void FunctionInliner::visit(UnaryExpression &unary)
 {
        visit_and_inline(unary.expression);
-       r_inline_result = 0;
 }
 
 void FunctionInliner::visit(BinaryExpression &binary)
 {
        visit_and_inline(binary.left);
        visit_and_inline(binary.right);
-       r_inline_result = 0;
 }
 
 void FunctionInliner::visit(MemberAccess &memacc)
 {
        visit_and_inline(memacc.left);
-       r_inline_result = 0;
 }
 
 void FunctionInliner::visit(FunctionCall &call)
@@ -259,8 +257,6 @@ void FunctionInliner::visit(FunctionCall &call)
                inlined further. */
                inlineable.erase(current_function);
        }
-       else
-               r_inline_result = 0;
 }
 
 void FunctionInliner::visit(ExpressionStatement &expr)
@@ -272,7 +268,6 @@ void FunctionInliner::visit(VariableDeclaration &var)
 {
        if(var.init_expression)
                visit_and_inline(var.init_expression);
-       r_inline_result = 0;
 }
 
 void FunctionInliner::visit(FunctionDeclaration &func)
@@ -364,6 +359,7 @@ void ExpressionInliner::visit_and_record(RefPtr<Expression> &ptr, const Operator
                        r_ref_info->inline_on_rhs = on_rhs;
                }
        }
+       r_ref_info = 0;
 }
 
 void ExpressionInliner::inline_expression(Expression &expr, RefPtr<Expression> &ptr, const Operator *outer_oper, const Operator *inner_oper, bool on_rhs)
@@ -439,7 +435,6 @@ void ExpressionInliner::visit(VariableReference &var)
 void ExpressionInliner::visit(MemberAccess &memacc)
 {
        visit_and_record(memacc.left, memacc.oper, false);
-       r_ref_info = 0;
        r_oper = memacc.oper;
        r_trivial = false;
 }
@@ -448,7 +443,6 @@ void ExpressionInliner::visit(UnaryExpression &unary)
 {
        SetFlag set_target(mutating, mutating || unary.oper->token[1]=='+' || unary.oper->token[1]=='-');
        visit_and_record(unary.expression, unary.oper, false);
-       r_ref_info = 0;
        r_oper = unary.oper;
        r_trivial = false;
 }
@@ -460,7 +454,6 @@ void ExpressionInliner::visit(BinaryExpression &binary)
                SetFlag clear_target(mutating, false);
                visit_and_record(binary.right, binary.oper, true);
        }
-       r_ref_info = 0;
        r_oper = binary.oper;
        r_trivial = false;
 }
@@ -489,7 +482,6 @@ void ExpressionInliner::visit(Assignment &assign)
                }
        }
 
-       r_ref_info = 0;
        r_oper = assign.oper;
        r_trivial = false;
 }
@@ -498,7 +490,6 @@ void ExpressionInliner::visit(FunctionCall &call)
 {
        for(NodeArray<Expression>::iterator i=call.arguments.begin(); i!=call.arguments.end(); ++i)
                visit_and_record(*i, 0, false);
-       r_ref_info = 0;
        r_oper = 0;
        r_trivial = false;
 }