     }
     Serial.print(F("> "));
     object *line = read();
-    if (line == nil) { Serial.println(); return; }
+    if (BreakLevel && line == nil) { Serial.println(); return; }
     Serial.println();
+    if (line == (object *)KET) error(F("Unmatched right bracket"));
     push(line, GCStack);
     printobject(eval(line,env));
     pop(GCStack);


#define numberp(x)         ((x)->type == NUMBER)
#define streamp(x)         ((x)->type == STREAM)
#define listp(x)           ((x)->type >= PAIR || (x)->type == ZERO)
#define consp(x)           (((x)->type >= PAIR || (x)->type == ZERO) && (x) != NULL)

#define mark(x)            (car(x) = (object *)(((unsigned int)(car(x))) | 0x8000))

  return NULL;
}

// In-place operations

object **place (object *args, object *env) {
  if (!consp(args)) return &cdr(findvalue(args, env));
  object* function = first(args);
  if (issymbol(function, CAR) || issymbol(function, FIRST)) {
    object *value = eval(second(args), env);
    if (!listp(value)) error(F("Can't take car"));
    return &car(value);
  }
  if (issymbol(function, CDR) || issymbol(function, REST)) {
    object *value = eval(second(args), env);
    if (!listp(value)) error(F("Can't take cdr"));
    return &cdr(value);
  }
  if (issymbol(function, NTH)) {
    int index = integer(eval(second(args), env));
    object *list = eval(third(args), env);
    if (!consp(list)) error(F("'nth' second argument is not a list"));
    while (index > 0) {
      list = cdr(list);
      if (list == NULL) error(F("'nth' index out of range"));
      index--;
    }
    return &car(list);
  }
  error(F("Illegal place"));
  return nil;
}

// Checked car and cdr

inline object *carx (object *arg) {
