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; }
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); }