module AbstractReflection
  # Reflecting on the compiler, both in a general sense (to just
  # compile things) and in specific states. It should be possible to
  # get a compiler instance and associated state from e.g. the
  # execution of a thread.
  # 
  # This class should also allow access to information about JIT,
  # caches etc
  module CompilerMirror
    include Mirror

    # Your Kernel#eval, but only compiles and returns
    # the compiled method object.
    #
    # return [MethodMirror]
    def compile(source)
      raise CapabilitiesExceeded
    end

    # For a specific compiler state, this holds the current module
    # definition stack. This should be a list of modules in which the
    # Thread, that belongs to this compiler state, is currently
    # nested. The first element is the module that would be target for
    # the next method definition.
    #
    # return [Array<ClassMirror>]
    def module_scope
      raise CapabilitiesExceeded
    end
  end
end