// Build an indexed identifier expression (foo[0]) public static void BuildIndexedIdentifier(IronyParser parser, Root root, Expression parentExpression, ParseTreeNode currentNode) { var indexedIdentifier = new IndexedIdentifier(parentExpression, currentNode.Token.Convert()); parentExpression.ChildExpressions.Add(indexedIdentifier); indexedIdentifier.Name = currentNode.ChildNodes[0].FindTokenAndGetText(); parser.ConsumeParseTree(root, indexedIdentifier, currentNode.ChildNodes[2]); }
// Generates a codedom indexed identifier: one that is an identifier followed by an indexer: ex foo[1]. public static CodeExpression Emit(IndexedIdentifier indexedIdentifier) { // Create the codedom indexer expression var codeIndex = new CodeIndexerExpression(); // Set the object that is being indexed. codeIndex.TargetObject = new CodeVariableReferenceExpression(indexedIdentifier.Name); // Set the expression that is generating the index. codeIndex.Indices.Add(CodeDomEmitter.EmitCodeExpression(indexedIdentifier.ChildExpressions[0])); return codeIndex; }