public static OrderedDictionary GetLocalsDictionary(ParseTreeNode node) { var types = GetTypes(node); var result = new OrderedDictionary(types.Count); var localsIds = new object[types.Count]; var sigArgs1ParseTreeNode = node; var sigArgParseTreeNode = sigArgs1ParseTreeNode.GetFirstChildWithGrammarName(GrammarNames.sigArg); while (sigArgParseTreeNode != null) { var sigArgId = SigArgParseTreeNodeHelper.GetId(sigArgParseTreeNode); var paramAttrParseTreeNode = sigArgParseTreeNode.GetFirstChildWithGrammarName(GrammarNames.paramAttr); var sigArgNumber = ParamAttrParseTreeNodeHelper.GetNumberAttribute(paramAttrParseTreeNode); localsIds[sigArgNumber] = sigArgId; sigArgs1ParseTreeNode = sigArgs1ParseTreeNode?.GetFirstChildWithGrammarName(GrammarNames.sigArgs1); sigArgParseTreeNode = sigArgs1ParseTreeNode?.GetFirstChildWithGrammarName(GrammarNames.sigArg); } foreach (var localId in localsIds) { result.Add(localId, null); } return(result); }
public static List <string> GetNames(ParseTreeNode node) { var result = new List <string>(); var sigArgs1ParseTreeNode = node; var sigArgParseTreeNode = sigArgs1ParseTreeNode.GetFirstChildWithGrammarName(GrammarNames.sigArg); while (sigArgParseTreeNode != null) { var sigArgId = SigArgParseTreeNodeHelper.GetId(sigArgParseTreeNode); result.Add(sigArgId); sigArgs1ParseTreeNode = sigArgs1ParseTreeNode?.GetFirstChildWithGrammarName(GrammarNames.sigArgs1); sigArgParseTreeNode = sigArgs1ParseTreeNode?.GetFirstChildWithGrammarName(GrammarNames.sigArg); } result.Reverse(); return(result); }