anchor.diff:  
     (commitChar result origCh))
   
  -(function processLine (result line)
  -  (initLine result line)
  +(function processLine (result lineNo)
  +  (initLine result result.inputLines[lineNo])
     (initIndent result)
   
     (setTabStops result)
   
  -  (var chars (str line NEWLINE))
  -  (forindex i 0 chars.length
  -    (processChar result chars[i]))
  +  ;; NOTE: inputLines may be mutated inside the loop (i.e. when line-splitting occurs),
  +  ;; so we cannot use an aliased `line` reference since it may get stale.
  +  (forindex x 0 result.inputLines[lineNo].length
  +    (set result.inputX x)
  +    (processChar result result.inputLines[lineNo][x]))
  +
  +  (processChar result NEWLINE)
   
     (var unmatchedX result.firstUnmatchedCloseParenX)
     (when (&& (!= unmatchedX SENTINEL_NULL)
  
positive.code: 
  (function insertWithinLine (result lineNo idx insert)
    (replaceWithinLine result lineNo idx idx insert))
  
  (function insertLineAt (result lineNo line)
    (result.lines.splice lineNo 0 line))
  
  (function initLine (result line)
    (set result.x 0)
  
negative.code: (function processText (text options mode)
    (var result (getInitialResult text options mode))
    (try
      (forindex i 0 result.inputLines.length
        (set result.inputLineNo i)
        (processLine result i))
      (finalizeResult result)
      (function (e)
        (processError result e)))
  