]> git.tdb.fi Git - libs/gl.git/blobdiff - source/glsl/debug.cpp
Rename InterfaceBlock::name to block_name for clarity
[libs/gl.git] / source / glsl / debug.cpp
index fd1fd667257b788f86f4b523575d8af730afbd9d..99d6edaaa0ab7b7f242e23c0ecc9fc2c04be47df 100644 (file)
@@ -21,7 +21,7 @@ const std::string &DumpTree::apply(Stage &stage)
        for(std::map<string, InterfaceBlock *>::const_iterator i=stage.interface_blocks.begin(); i!=stage.interface_blocks.end(); ++i)
                if(seen_interfaces.insert(i->second).second)
                {
-                       string text = format("Interface block: %%%d %s %s", get_label(*i->second), i->second->interface, i->second->name);
+                       string text = format("Interface block: %%%d %s %s", get_label(*i->second), i->second->interface, i->second->block_name);
                        if(!i->second->instance_name.empty())
                                text += format(" %s", i->second->instance_name);
                        append(text);
@@ -146,11 +146,6 @@ void DumpTree::visit(Literal &literal)
        append(format("Literal: %s -> %s", literal.token, format_type(literal.type)));
 }
 
-void DumpTree::visit(ParenthesizedExpression &parexpr)
-{
-       annotated_branch(format("(expr) -> %s", format_type(parexpr.type)), *parexpr.expression);
-}
-
 void DumpTree::visit(VariableReference &var)
 {
        string text;
@@ -196,7 +191,7 @@ void DumpTree::visit(UnaryExpression &unary)
 
 void DumpTree::visit(BinaryExpression &binary)
 {
-       append(format("Binary: %s -> %s", (binary.oper->token[0]=='[' ? "[]" : binary.oper->token), format_type(binary.type)));
+       append(format("Binary: %s%s -> %s", binary.oper->token, binary.oper->token2, format_type(binary.type)));
        begin_sub();
        binary.left->visit(*this);
        last_branch();
@@ -208,14 +203,49 @@ void DumpTree::visit(Assignment &assign)
 {
        append(format("Assignment: %s%s -> %s", assign.oper->token, (assign.self_referencing ? " (self-referencing)" : ""), format_type(assign.type)));
        begin_sub();
-       if(assign.target_declaration)
-               append(format("Target: %%%d %s %s", get_label(*assign.target_declaration), assign.target_declaration->type, assign.target_declaration->name));
+       if(assign.target.declaration)
+       {
+               string text = format("Target: %%%d", get_label(*assign.target.declaration));
+
+               static const char swizzle[4] = { 'x', 'y', 'z', 'w' };
+               for(unsigned i=0; i<assign.target.chain_len; ++i)
+               {
+                       unsigned component = assign.target.chain[i];
+                       switch(static_cast<Assignment::Target::ChainType>(component&0xC0))
+                       {
+                       case Assignment::Target::MEMBER:
+                               text += format(" .%d", component&0x3F);
+                               break;
+                       case Assignment::Target::SWIZZLE:
+                               text += " .";
+                               for(unsigned j=0; j<4; ++j)
+                                       if(component&(1<<j))
+                                               text += swizzle[j];
+                               break;
+                       case Assignment::Target::ARRAY:
+                               text += format(" [%d]", component&0x3F);
+                               break;
+                       }
+               }
+               append(text);
+       }
        assign.left->visit(*this);
        last_branch();
        assign.right->visit(*this);
        end_sub();
 }
 
+void DumpTree::visit(TernaryExpression &ternary)
+{
+       append(format("Ternary: %s%s -> %s", ternary.oper->token, ternary.oper->token2, 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: ";
@@ -342,34 +372,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.block_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)
@@ -377,6 +407,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();