assignment method

Expr assignment()

Implementation

Expr assignment() {
  Expr expr = conditional();
  if (match([TokenType.EQUAL])) {
    Token equals = previous();
    Expr value = assignment();
    if (expr is Variable) {
      Token name = expr.name;
      return Assign(name, value);
    } else if (expr is Get) {
      return Set(expr.object, expr.name, value);
    } else if (expr is Indexing) {
      return IndexSet(expr.callee, expr.key, value);
    }
    throw error(equals, "Invalid assignment target.");
  }
  return expr;
}