public void visit(FunctionDeclaration that) { System.Text.StringBuilder mangled = new System.Text.StringBuilder(64); that.Encode(mangled); string name = mangled.ToString(); if (!_symbols.Insert(name, that)) { throw new CheckerError(that.Position, "Duplicate name '" + Demangler.Decode(name) + "' detected in function declaration"); } _symbols.EnterScope(name); that.Type.visit(this); foreach (ParameterDeclaration parameter in that.Parameters) { // insert each parameter into the current scope so that it becomes visible to the code if (!_symbols.Insert(parameter.Name, parameter)) { throw new CheckerError(parameter.Position, "Duplicate name '" + parameter.Name + "' detected in parameter"); } parameter.visit(this); } if (that.Body != null) { that.Body.visit(this); } _symbols.LeaveScope(name); }