예제 #1
0
파일: Checker.cs 프로젝트: bencz/Beryl
        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);
        }