void DumpTree::visit(MemberAccess &memacc)
{
- annotated_branch(format("Member access: .%s", memacc.member), *memacc.left);
+ string text = "Member access:";
+ if(memacc.declaration)
+ text += format(" %%%d", get_label(*memacc.declaration));
+ text += format(" .%s", memacc.member);
+ annotated_branch(text, *memacc.left);
}
void DumpTree::visit(UnaryExpression &unary)
void DumpTree::visit(Assignment &assign)
{
- append(format("Assignment%s", (assign.self_referencing ? " (self-referencing)" : "")));
+ append(format("Assignment: %s%s", assign.oper, (assign.self_referencing ? " (self-referencing)" : "")));
begin_sub();
assign.left->visit(*this);
last_branch();
void DumpTree::visit(FunctionCall &call)
{
- string head = format("Function call: %s", call.name);
+ string head = "Function call: ";
if(call.declaration)
- head += format(", declaration %%%d", get_label(*call.declaration));
+ head += format("%%%d ", get_label(*call.declaration));
+ head += call.name;
if(call.constructor)
- head += ", constructor";
+ head += " (constructor)";
append(head);
begin_sub();
for(vector<Layout::Qualifier>::const_iterator i=layout.qualifiers.begin(); i!=layout.qualifiers.end(); )
{
vector<Layout::Qualifier>::const_iterator j = increment(i, layout.qualifiers);
- string qualifier = j->identifier;
- if(!j->value.empty())
- qualifier += format("=%s", j->value);
+ string qualifier = j->name;
+ if(j->has_value)
+ qualifier += format("=%d", j->value);
append(qualifier);
}
end_sub();
if(!var.precision.empty())
decl += format("%s ", var.precision);
decl += format("%s %s", var.type, var.name);
+ if(var.linked_declaration)
+ decl += " (linked)";
append(decl);
begin_sub();
if(!var.init_expression)
last_branch();
if(var.array)
- annotated_branch("Array []", *var.array_size);
+ {
+ if(var.array_size)
+ annotated_branch("Array []", *var.array_size);
+ else
+ append("Array []");
+ }
last_branch();
if(var.init_expression)
end_sub();
}
+void DumpTree::visit(Passthrough &pass)
+{
+ append("passthrough");
+ if(pass.subscript)
+ {
+ begin_sub();
+ last_branch();
+ pass.subscript->visit(*this);
+ end_sub();
+ }
+}
+
void DumpTree::visit(Return &ret)
{
if(ret.expression)