   @defaults: defaults
   @problems: problems
   @execution: execution
+
+  # Current call depth
+  depth: 0
 
   #MODIFIES: @options
   #EFFECTS: Initialize the Aether object by modifying @options by combining the default options with the options parameter

    fn = @createSandboxedFunction()

    ## Wrapper function
    ->
      Function::constructor = protectBuiltins.raiseDisabledFunctionConstructor
      try
        result = fn.apply @, arguments
      finally
        protectBuiltins.restoreBuiltins()
      result

  createMethod: ->

  sandboxGenerator: (fn) ->
    # If you want to sandbox a generator each time it's called, then call result of createFunction and hand to this.
    oldNext = fn.next
    fn.next = @wrapWithSandbox ->
      oldNext.apply fn, arguments
    fn

  run: (fn, args...) ->
