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;
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();
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: ";
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)
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();