public bool ApplyBehaviour(List <ASTNode> nodes, int opIndex, OrderMethod caller) { if (this.m_isObj) { if (this.m_matchReqParenthesis) // sizeof operator or something { throw new NotImplementedException(); } else { nodes[opIndex] = new NewObjectNode((nodes[opIndex + 1] as IdentifierNode).ToTypeIdentifier(), nodes[opIndex + 2] as ExpressionNode, nodes[opIndex].Pos); nodes.RemoveRange(opIndex + 1, 2); return(true); } } else { var look = nodes[opIndex + 1] as LookupNode; nodes[opIndex] = new NewArrayNode(look.ToTypeIdentifier(), look.Index, nodes[opIndex].Pos); nodes.RemoveAt(opIndex + 1); } return(true); }
/// <summary> /// new_array_line = "[" init_expr_block "]" /// </summary> private NewArrayNode parseNewArrayLine() { if (!check(LexemType.SquareOpen)) return null; var node = new NewArrayNode(); node.Expressions = parseInitExprLine().ToList(); if (node.Expressions.Count == 0) error(ParserMessages.ArrayItem); ensure(LexemType.SquareClose, ParserMessages.SymbolExpected, "]"); return node; }