Exemple #1
0
        private void HandleMemberDeclFunction(MemberDeclNode n)
        {
            var children = n.GetChildren();

            var visibility    = children.GetCast <VisibilityNode>(0).Visibility;
            var name          = children[1].Token.Lexeme;
            var funcParamList = children[2].GetChildren();
            var type          = children[3].Token;

            var tableEntry = new ClassSymbolTableEntryFunction()
            {
                Visibility = visibility,
                Name       = name,
                Type       = type
            };

            for (int i = 0; i < funcParamList.Count; i += 3)
            {
                var paramType = funcParamList[i + 0].Token;
                var paramName = funcParamList[i + 1].Token.Lexeme;
                var arrayDims = NodeUtils.ExtractArrayDimListNode(funcParamList.GetCast <ArrayDimListNode>(i + 2));

                var entry = new ClassSymbolTableEntryFunctionParam()
                {
                    Type      = paramType,
                    Name      = paramName,
                    ArrayDims = arrayDims,
                };

                tableEntry.AddEntry(entry);
            }

            n.Table.AddEntry(tableEntry);
            n.SecondarySymTable = tableEntry;
        }
Exemple #2
0
        private bool FunctionDefnFound(ClassSymbolTableEntryFunction decl)
        {
            bool found = false;

            foreach (var defn in FunctionSymbolTable.Entries.Cast <FunctionSymbolTableEntry>())
            {
                if (string.Equals(defn.ScopeSpec, ((ClassSymbolTable)decl.Parent).ClassName) &&
                    string.Equals(defn.Name, decl.Name) &&
                    FunctionDefnDeclParamsMatch(decl.ParamsTable, defn.Params))
                {
                    found = true;
                }
            }

            return(found);
        }