   }
   
   private func relativeLineTo(args: Arguments) throws -> Expr {
-    var shape = try self.shape(from: nil)
-    var skipLast = false
-    if case .some(.object(let obj)) = args.last, let sh = obj as? Shape {
-      shape = sh
-      skipLast = true
-    }
+    let (shape, skipLast) = try self.shape(from: args)
     var points = self.pointList(args, skipLast: skipLast)
     while case .pair(let point, let rest) = points {
       guard case .pair(.flonum(let x), .flonum(let y)) = point else {

    return shape
  }
  
  private func image(from expr: Expr) throws -> NSImage {
    guard case .object(let obj) = expr,
          let imageBox = obj as? ImmutableBox<NSImage> else {

  }
  
  private func lineTo(args: Arguments) throws -> Expr {
    let (shape, skipLast) = try self.shape(from: args)
    var points = self.pointList(args, skipLast: skipLast)
    while case .pair(let point, let rest) = points {
      guard case .pair(.flonum(let x), .flonum(let y)) = point else {
