 # is passed, recursively compile all '.coffee', '.litcoffee', and '.coffee.md'
 # extension source files in it and all subdirectories.
 compilePath = (source, topLevel, base) ->
+  return if source in sources   or
+            watchedDirs[source] or
+            not topLevel and (notSources[source] or hidden source)
   try
     stats = fs.statSync source
   catch err

    compileScript(source, code.toString(), base)
  else
    notSources[source] = yes
    removeSource source, base


# Compile a single source script, containing the given code, according to the
# requested options. If evaluating the script directly sets `__filename`,

  o.compile     or=  !!o.output
  o.run         = not (o.compile or o.print or o.map)
  o.print       = !!  (o.print or (o.eval or o.stdio and o.compile))

# The compile-time options to pass to the CoffeeScript compiler.
compileOptions = (filename, base) ->
