-
- self_referencing = false;
- assign.right->visit(*this);
-
- assign.self_referencing = (self_referencing || assign.oper!="=");
- assign.target_declaration = assignment_target;
-}
-
-void VariableResolver::visit(StructDeclaration &strct)
-{
- TraversingVisitor::visit(strct);
- blocks.back()->types[strct.name] = &strct;
-}
-
-void VariableResolver::visit(VariableDeclaration &var)
-{
- for(vector<Block *>::iterator i=blocks.end(); i!=blocks.begin(); )
- {
- --i;
- map<string, StructDeclaration *>::iterator j = (*i)->types.find(var.type);
- if(j!=(*i)->types.end())
- var.type_declaration = j->second;
- }
-
- if(!block_interface.empty() && var.interface.empty())
- var.interface = block_interface;
-
- TraversingVisitor::visit(var);
- blocks.back()->variables[var.name] = &var;
- if(anonymous && blocks.size()>1)
- blocks[blocks.size()-2]->variables[var.name] = &var;
-}
-
-void VariableResolver::visit(InterfaceBlock &iface)
-{
- SetFlag set(anonymous);
- SetForScope<string> set2(block_interface, iface.interface);
- TraversingVisitor::visit(iface);
-}
-
-
-void FunctionResolver::visit(FunctionCall &call)
-{
- map<string, vector<FunctionDeclaration *> >::iterator i = functions.find(call.name);
- if(i!=functions.end())
- call.declaration = i->second.back();
-
- TraversingVisitor::visit(call);
-}
-
-void FunctionResolver::visit(FunctionDeclaration &func)
-{
- vector<FunctionDeclaration *> &decls = functions[func.name];
- if(func.definition)
- {
- for(vector<FunctionDeclaration *>::iterator i=decls.begin(); i!=decls.end(); ++i)
- (*i)->definition = func.definition;
- decls.clear();
- decls.push_back(&func);
- }
- else if(!decls.empty() && decls.back()->definition)
- func.definition = decls.back()->definition;
- else
- decls.push_back(&func);
-
- TraversingVisitor::visit(func);