]> git.tdb.fi Git - libs/gl.git/blobdiff - source/glsl/debug.cpp
Implement the ternary operator in GLSL
[libs/gl.git] / source / glsl / debug.cpp
index ef9e3e0eafc325a92f3bf389329c3efb3563b738..700acbf9cd50a66c8db4e98c54343d8696a332ce 100644 (file)
@@ -240,6 +240,17 @@ void DumpTree::visit(Assignment &assign)
        end_sub();
 }
 
+void DumpTree::visit(TernaryExpression &ternary)
+{
+       append(format("Ternary: %s -> %s", (ternary.oper->token[0]=='?' ? "?:" : ternary.oper->token), format_type(ternary.type)));
+       begin_sub();
+       ternary.condition->visit(*this);
+       ternary.true_expr->visit(*this);
+       last_branch();
+       ternary.false_expr->visit(*this);
+       end_sub();
+}
+
 void DumpTree::visit(FunctionCall &call)
 {
        string head = "Function call: ";
@@ -366,34 +377,34 @@ void DumpTree::visit(VariableDeclaration &var)
        append_subtree(branches);
 }
 
-void DumpTree::visit(InterfaceBlock &block)
+void DumpTree::visit(InterfaceBlock &iface)
 {
        string head;
-       if(!block.instance_name.empty())
-               head += format("%%%d ", get_label(block));
-       head += format("%s %s", block.interface, block.name);
-       if(!block.instance_name.empty())
-               head += format(" %s", block.instance_name);
-       if(block.array)
+       if(!iface.instance_name.empty())
+               head += format("%%%d ", get_label(iface));
+       head += format("%s %s", iface.interface, iface.name);
+       if(!iface.instance_name.empty())
+               head += format(" %s", iface.instance_name);
+       if(iface.array)
                head += "[]";
-       if(block.source==BUILTIN_SOURCE)
+       if(iface.source==BUILTIN_SOURCE)
                head += " (builtin)";
-       else if(block.linked_block)
+       else if(iface.linked_block)
                head += " (linked)";
        append(head);
 
        begin_sub();
        last_branch();
-       if(block.type_declaration)
-               append(format("Type: %%%d %s", get_label(*block.type_declaration), block.type_declaration->name));
-       else if(block.members)
-               block.members->visit(*this);
+       if(iface.type_declaration)
+               append(format("Type: %%%d %s", get_label(*iface.type_declaration), iface.type_declaration->name));
+       else if(iface.members)
+               iface.members->visit(*this);
        end_sub();
 }
 
 void DumpTree::visit(FunctionDeclaration &func)
 {
-       string text = format("%%%d %s %s", get_label(func), func.return_type, func.name);
+       string text = format("%%%d %s %s%s", get_label(func), func.return_type, func.name, (func.signature.empty() ? "(?)" : func.signature));
        if(func.source==BUILTIN_SOURCE)
                text += " (builtin)";
        else if(!func.definition)
@@ -401,6 +412,8 @@ void DumpTree::visit(FunctionDeclaration &func)
        append(text);
 
        begin_sub();
+       if(func.return_type_declaration)
+               append(format("Return type: %%%d %s", get_label(*func.return_type_declaration), func.return_type_declaration->name));
        for(NodeArray<VariableDeclaration>::const_iterator i=func.parameters.begin(); i!=func.parameters.end(); ++i)
                (*i)->visit(*this);
        last_branch();