finishIndexOrSlice method

Expr finishIndexOrSlice(
  1. Expr object
)

Finishes parsing an indexing operation after the opening bracket '[' has been matched. index ::= "" expression "" ;

Implementation

Expr finishIndexOrSlice(Expr object) {
  Token bracket = previous(); // The '[' token
  if (check(TokenType.COLON)) {
    // [:end] or [:] slice
    Expr slice = parseSlice(object, bracket, null);
    return slice;
  }
  Expr index = expression();
  if (check(TokenType.COLON)) {
    // [start:end]or [start:end:step] or [start:] slice
    Expr slice = parseSlice(object, bracket, index);
    return slice;
  }
  // single index
  consume(TokenType.RIGHT_BRACKET, "Expect ']' after index.");
  return IndexGetExpr(object, bracket, index);
}