The main REPL related classes and values are as follows.
In addition to standard compiler classes Global and Settings, there are:

History: an interface for session history.
Completion: an interface for tab completion.
ILoop (formerly InterpreterLoop): The umbrella class for a session.
IMain (formerly Interpreter): Handles the evolving state of the session
and handles submitting code to the compiler and handling the output.
InteractiveReader: how ILoop obtains input.
History: an interface for session history.
Completion: an interface for tab completion.
Power: a repository for more advanced/experimental features.

A lazy type that completes itself by calling parameter doComplete.
Any linked modules/classes or module classes are also initialized.
Todo: consider factoring out behavior from TopClassCompleter/SymbolLoader into
supertrait SymLoader

The package objects of scala and scala.reflect should always
be loaded in binary if classfiles are available, even if sourcefiles
are newer.

The package objects of scala and scala.reflect should always
be loaded in binary if classfiles are available, even if sourcefiles
are newer. Late-compiling these objects from source leads to compilation
order issues.
Note: We do a name-base comparison here because the method is called before we even
have ReflectPackage defined.

In batch mode: Enter class and module with given name into scope of root
and give them a source completer for given src as type.

In batch mode: Enter class and module with given name into scope of root
and give them a source completer for given src as type.
In IDE mode: Find all toplevel definitions in src and enter then into scope of root
with source completer for given src as type.
(overridden in interactive.Global).