     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()

    try
        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"
    catch e
        alight.exceptionHandler e, '$scan, error in expression: ' + result.src,
            src: result.src
            scope: result.scope
            element: result.element
            result: result
    result.mainLoop = mainLoop
    result.totalChanges = totalChanges
    result

    index = 0
    cd = topCD
    while cd
        scope = cd.scope
        locals = cd.locals

        # default watchers
        total += cd.watchList.length
        for w in cd.watchList.slice()
            last = w.value
            try
                value = w.exp locals
            catch e
                value = ErrorValue
            if last isnt value
                mutated = false
                if w.isArray
