]> git.tdb.fi Git - libs/gl.git/blobdiff - source/glsl/generate.cpp
Store a pointer to operator info rather than the token in expressions
[libs/gl.git] / source / glsl / generate.cpp
index 13f67d8cade070a4349bb2335080b27d1a2c790c..6b336f3179de690b2967cd85fe5da0cafff130ab 100644 (file)
@@ -230,7 +230,7 @@ void VariableResolver::visit(MemberAccess &memacc)
 
 void VariableResolver::visit(BinaryExpression &binary)
 {
-       if(binary.oper=="[")
+       if(binary.oper->token[0]=='[')
        {
                {
                        SetForScope<bool> set(record_target, false);
@@ -261,7 +261,7 @@ void VariableResolver::visit(Assignment &assign)
        self_referencing = false;
        assign.right->visit(*this);
 
-       assign.self_referencing = (self_referencing || assign.oper!="=");
+       assign.self_referencing = (self_referencing || assign.oper->token[0]!='=');
        assign.target_declaration = assignment_target;
 }
 
@@ -329,10 +329,11 @@ void FunctionResolver::visit(FunctionDeclaration &func)
        }
        else
        {
+               func.definition = 0;
                if(!stage_decl)
                        stage_decl = &func;
-
-               func.definition = stage_decl->definition;
+               else
+                       func.definition = stage_decl->definition;
        }
        decls.push_back(&func);
 
@@ -459,7 +460,7 @@ ExpressionStatement &InterfaceGenerator::insert_assignment(const string &left, E
        VariableReference *ref = new VariableReference;
        ref->name = left;
        assign->left = ref;
-       assign->oper = "=";
+       assign->oper = &Operator::get_operator("=", Operator::BINARY);
        assign->right = right;
 
        ExpressionStatement *stmt = new ExpressionStatement;
@@ -621,9 +622,8 @@ void InterfaceGenerator::visit(Passthrough &pass)
 
                BinaryExpression *subscript = new BinaryExpression;
                subscript->left = ref;
-               subscript->oper = "[";
+               subscript->oper = &Operator::get_operator("[", Operator::BINARY);
                subscript->right = pass.subscript;
-               subscript->after = "]";
 
                MemberAccess *memacc = new MemberAccess;
                memacc->left = subscript;
@@ -643,9 +643,8 @@ void InterfaceGenerator::visit(Passthrough &pass)
                {
                        BinaryExpression *subscript = new BinaryExpression;
                        subscript->left = ref;
-                       subscript->oper = "[";
+                       subscript->oper = &Operator::get_operator("[", Operator::BINARY);
                        subscript->right = pass.subscript;
-                       subscript->after = "]";
                        insert_assignment(out_name, subscript);
                }
                else