     var next = expr
     var exprs = Exprs()
     while case .pair(let car, let cdr) = next {
-      exprs.append(localDefine ? try self.expand(car, in: env) : car)
+      if localDefine {
+        try self.expand(car, in: env, into: &exprs)
+      } else {
+        exprs.append(car)
+      }
       next = cdr
     }
     // Throw error if the sequence is not a proper list

                      return expanded
                  }
                default:
                  return expr
              }
            } else {
              return expr
            }
          case .macroExpansionRequired(let transformer):
            let expanded =

    if localDefine {
      loop: while i < exprs.count {
        guard case .pair(.symbol(let fun), let binding) = exprs[i],
              fun.interned == self.context.symbols.define,
              env.isImmutable(fun) else {
          break loop
        }
        // Distinguish value definitions from function definitions
