     index = 0
     cd = topCD
     while cd
-        scope = result.scope = cd.scope
+        scope = cd.scope
         locals = cd.locals
 
         # default watchers
         total += cd.watchList.length
         for w in cd.watchList.slice()
-            result.src = w.src
-            result.element = w.el
             last = w.value
-            value = w.exp locals
+            try
+                value = w.exp locals
+            catch e
+                value = ErrorValue
             if last isnt value
                 mutated = false
                 if w.isArray

    result.total = total
    result.changes = changes
    result.extraLoop = extraLoop

    result.scope = null
    result.src = ''
    result.element = null
    return



    if alight.debug.scan
        start = get_time()

    result =
        total: 0
        changes: 0
        extraLoop: false
        src: ''
        scope: null
        element: null

    while mainLoop
        mainLoop--
        root.extraLoop = false

        # take onScanOnce
        if root.watchers.onScanOnce.length
            onScanOnce = root.watchers.onScanOnce.slice()
            root.watchers.onScanOnce.length = 0
            for callback in onScanOnce
                callback.call root

        scanCore @, result
        totalChanges += result.changes

        if not result.extraLoop and not root.extraLoop
            break
    if alight.debug.scan
        duration = get_time() - start
        console.log "$scan: loops: (#{10-mainLoop}), last-loop changes: #{result.changes}, watches: #{result.total} / #{duration}ms"
    result.mainLoop = mainLoop
    result.totalChanges = totalChanges
    result
