scala.tools.nsc.interpreter

IMain

class IMain extends Imports

An interpreter for Scala code.

The main public entry points are compile(), interpret(), and bind(). The compile() method loads a complete Scala file. The interpret() method executes one line of Scala code at the request of the user. The bind() method binds an object to a variable that can then be used by later interpreted code.

The overall approach is based on compiling the requested code and then using a Java classloader and Java reflection to run the code and access its results.

In more detail, a single compiler instance is used to accumulate all successfully compiled or interpreted Scala code. To "interpret" a line of code, the compiler generates a fresh object that includes the line of code and which has public member(s) to export all variables defined by that code. To extract the result of an interpreted line to show the user, a second "result object" is created which imports the variables exported by the above object and then exports members called "$eval" and "$print". To accomodate user expressions that read from variables or methods defined in previous statements, "import" statements are used.

This interpreter shares the strengths and weaknesses of using the full compiler-to-Java. The main strength is that interpreted code behaves exactly as does compiled code, including running at full speed. The main weakness is that redefining classes and methods is not handled properly, because rebinding at the Java level is technically difficult.

Self Type
IMain
Source
IMain.scala
Linear Supertypes
Imports, AnyRef, Any
Known Subclasses
Ordering
  1. Alphabetic
  2. By inheritance
Inherited
  1. Hide All
  2. Show all
  1. IMain
  2. Imports
  3. AnyRef
  4. Any
Visibility
  1. Public
  2. All

Instance Constructors

  1. new IMain()

  2. new IMain(settings: Settings)

    construct an interpreter that reports to Console

  3. new IMain(settings: Settings, out: JPrintWriter)

Type Members

  1. case class ComputedImports(prepend: String, append: String, access: String) extends Product with Serializable

    Compute imports that allow definitions from previous requests to be visible in a new request.

  2. class ReadEvalPrint extends AnyRef

    Here is where we:

  3. class Request extends AnyRef

    One line of code submitted by the user for interpretation

Value Members

  1. final def !=(arg0: AnyRef): Boolean

    Definition Classes
    AnyRef
  2. final def !=(arg0: Any): Boolean

    Definition Classes
    Any
  3. final def ##(): Int

    Definition Classes
    AnyRef → Any
  4. final def ==(arg0: AnyRef): Boolean

    Definition Classes
    AnyRef
  5. final def ==(arg0: Any): Boolean

    Definition Classes
    Any
  6. def addImports(ids: String*): Result

  7. def afterTyper[T](op: ⇒ T): T

  8. def aliasForType(path: String): Option[String]

    Parse the ScalaSig to find type aliases

  9. def allDefinedNames: List[Name]

  10. def allImplicits: List[Name]

  11. def allSeenTypes: List[String]

  12. def apply(name: String): Symbol

    Translate a repl-defined identifier into a Symbol.

  13. final def asInstanceOf[T0]: T0

    Definition Classes
    Any
  14. def atPickler[T](op: ⇒ T): T

  15. def beQuietDuring[T](body: ⇒ T): T

    Temporarily be quiet

  16. def beSilentDuring[T](operation: ⇒ T): T

  17. def bind[T](name: String, value: T)(implicit arg0: Manifest[T]): Result

  18. def bind(p: NamedParam): Result

  19. def bind(name: String, boundType: String, value: Any): Result

    Bind a specified name to a specified value.

    Bind a specified name to a specified value. The name may later be used by expressions passed to interpret.

    name

    the variable name to bind

    boundType

    the type of the variable, as a string

    value

    the object value to bind to it

    returns

    an indication of whether the binding succeeded

  20. def bindValue(name: String, x: Any): Result

  21. def bindValue(x: Any): Result

  22. def classLoader: AbstractFileClassLoader

  23. def classOfTerm(id: String): Option[JClass]

  24. def clearExecutionWrapper(): Unit

  25. def clone(): AnyRef

    Attributes
    protected[lang]
    Definition Classes
    AnyRef
    Annotations
    @throws()
  26. def close(): Unit

    This instance is no longer needed, so release any resources it is using.

    This instance is no longer needed, so release any resources it is using. The reporter's output gets flushed.

  27. def compileSources(sources: SourceFile*): Boolean

    Compile an nsc SourceFile.

    Compile an nsc SourceFile. Returns true if there are no compilation errors, or false otherwise.

  28. def compileString(code: String): Boolean

    Compile a string.

    Compile a string. Returns true if there are no compilation errors, or false otherwise.

  29. lazy val compilerClasspath: List[URL]

    the compiler's classpath, as URL's

  30. def createLineManager(): Manager

    Create a line manager.

    Create a line manager. Overridable.

    Attributes
    protected
  31. def debugging[T](msg: String)(res: T): T

  32. def definedSymbols: Set[Symbol]

  33. def definedTerms: List[TermName]

  34. def definedTypes: List[TypeName]

  35. def definitionForName(name: Name): Option[MemberHandler]

  36. final def eq(arg0: AnyRef): Boolean

    Definition Classes
    AnyRef
  37. def equals(arg0: Any): Boolean

    Definition Classes
    AnyRef → Any
  38. def executionWrapper: String

  39. def finalize(): Unit

    Attributes
    protected[lang]
    Definition Classes
    AnyRef
    Annotations
    @throws()
  40. def flatName(id: String): String

  41. lazy val formatting: Formatting

  42. def generatedName(simpleName: String): Option[String]

    Given a simple repl-defined name, returns the real name of the class representing it, e.

    Given a simple repl-defined name, returns the real name of the class representing it, e.g. for "Bippy" it may return

       $line19.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$Bippy
    
  43. final def getClass(): java.lang.Class[_]

    Definition Classes
    AnyRef → Any
  44. def getCompilerClass(name: String): Symbol

  45. def getCompilerModule(name: String): Symbol

  46. def getInterpreterClassLoader(): AbstractFileClassLoader

  47. lazy val global: Global

    the public, go through the future compiler

  48. def handleTermRedefinition(name: TermName, old: Request, req: Request): Unit

  49. def handleTypeRedefinition(name: TypeName, old: Request, req: Request): Unit

    Stubs for work in progress.

  50. def hashCode(): Int

    Definition Classes
    AnyRef → Any
  51. def implicitSymbols: List[Symbol]

    Definition Classes
    Imports
  52. def implicitSymbolsBySource: List[(Symbol, List[Symbol])]

    Definition Classes
    Imports
  53. def importHandlers: List[ImportHandler]

  54. def importedSymbols: List[Symbol]

    Definition Classes
    Imports
  55. def importedSymbolsBySource: List[(Symbol, List[Symbol])]

    Tuples of (source, imported symbols) in the order they were imported.

    Tuples of (source, imported symbols) in the order they were imported.

    Definition Classes
    Imports
  56. def importedTermNamed(name: String): Option[TermSymbol]

    Definition Classes
    Imports
  57. def importedTermSymbols: List[TermSymbol]

    Definition Classes
    Imports
  58. def importedTerms: List[TermName]

    Definition Classes
    Imports
  59. def importedTypeSymbols: List[TypeSymbol]

    Definition Classes
    Imports
  60. def importedTypes: List[TypeName]

    Definition Classes
    Imports
  61. def importsCode(wanted: Set[Name]): ComputedImports

    Attributes
    protected
    Definition Classes
    Imports
  62. def initialize(postInitSignal: ⇒ Unit): Unit

  63. def initializeSynchronous(): Unit

  64. def interpret(line: String, synthetic: Boolean): Result

  65. def interpret(line: String): Result

    Interpret one line of input.

    Interpret one line of input. All feedback, including parse errors and evaluation results, are printed via the supplied compiler's reporter. Values defined are available for future interpreted strings.

    The return value is whether the line was interpreter successfully, e.g. that there were no parse errors.

  66. def isInitializeComplete: Boolean

  67. final def isInstanceOf[T0]: Boolean

    Definition Classes
    Any
  68. def isNoImports: T

    Definition Classes
    Imports
  69. def isNoPredef: Boolean

    Definition Classes
    Imports
  70. def isParseable(line: String): Boolean

  71. lazy val isettings: ISettings

    interpreter settings

  72. def languageSymbols: List[Symbol]

    Definition Classes
    Imports
  73. def languageWildcardHandlers: List[ImportHandler]

    Definition Classes
    Imports
  74. def languageWildcardSyms: List[Symbol]

    Symbols whose contents are language-defined to be imported.

    Symbols whose contents are language-defined to be imported.

    Definition Classes
    Imports
  75. def languageWildcards: List[Type]

    Definition Classes
    Imports
  76. lazy val lineManager: Manager

  77. lazy val memberHandlers: MemberHandlers { val intp: IMain.this.type }

  78. def mostRecentVar: String

    Returns the name of the most recent interpreter result.

    Returns the name of the most recent interpreter result. Mostly this exists so you can conveniently invoke methods on the previous result.

  79. object naming extends Naming

  80. final def ne(arg0: AnyRef): Boolean

    Definition Classes
    AnyRef
  81. def newCompiler(settings: Settings, reporter: Reporter): Global

    Instantiate a compiler.

    Instantiate a compiler. Overridable.

    Attributes
    protected
  82. final def notify(): Unit

    Definition Classes
    AnyRef
  83. final def notifyAll(): Unit

    Definition Classes
    AnyRef
  84. def onlyTerms(xs: List[Name]): List[TermName]

    Attributes
    protected
  85. def onlyTypes(xs: List[Name]): List[TypeName]

    Attributes
    protected
  86. def optCompilerClass(name: String): Option[Symbol]

  87. def optCompilerModule(name: String): Option[Symbol]

  88. def optFlatName(id: String): Option[String]

  89. val out: JPrintWriter

    Attributes
    protected
  90. def parentClassLoader: ClassLoader

    Parent classloader.

    Parent classloader. Overridable.

    Attributes
    protected
  91. def parse(line: String): Option[List[Tree]]

  92. def pathToName(name: Name): String

  93. def pathToTerm(id: String): String

  94. def pathToType(id: String): String

  95. def prevRequestList: List[Request]

    Attributes
    protected
  96. def quietBind(p: NamedParam): Result

  97. def quietImport(ids: String*): Result

  98. def quietRun[T](code: String): Result

  99. def rebind(p: NamedParam): Result

  100. def recordRequest(req: Request): Unit

  101. lazy val repllog: Logger

  102. lazy val reporter: ConsoleReporter

  103. def requestForIdent(line: String): Option[Request]

  104. def requestForName(name: Name): Option[Request]

  105. def requestHistoryForName(name: Name): List[Request]

  106. def reset(): Unit

    Reset this interpreter, forgetting all user-specified requests.

  107. def resetClassLoader(): Unit

  108. def runtimeClassAndTypeOfTerm(id: String): Option[(JClass, Type)]

  109. def runtimeTypeOfTerm(id: String): Option[Type]

  110. def safeClass(name: String): Option[Symbol]

  111. def safeModule(name: String): Option[Symbol]

  112. def sessionImportedSymbols: List[Symbol]

    Definition Classes
    Imports
  113. def sessionWildcards: List[Type]

    Types which have been wildcard imported, such as: val x = "abc" ; import x.

    Types which have been wildcard imported, such as: val x = "abc" ; import x._ // type java.lang.String import java.lang.String._ // object java.lang.String

    Used by tab completion.

    XXX right now this gets import x._ and import java.lang.String._, but doesn't figure out import String._. There's a lot of ad hoc scope twiddling which should be swept away in favor of digging into the compiler scopes.

    Definition Classes
    Imports
  114. def setContextClassLoader(): Unit

  115. def setExecutionWrapper(code: String): Unit

  116. val settings: Settings

  117. def showCodeIfDebugging(code: String): Unit

  118. def symbolDefString(sym: Symbol): String

  119. def symbolOfTerm(id: String): Symbol

  120. final def synchronized[T0](arg0: ⇒ T0): T0

    Definition Classes
    AnyRef
  121. def terms(name: String): Symbol

  122. def toString(): String

    Definition Classes
    AnyRef → Any
  123. def typeCleanser(sym: Symbol, memberName: Name): Type

  124. def typeOfExpression(expr: String, silent: Boolean = true): Option[Type]

  125. def typeOfTerm(id: String): Option[Type]

  126. def types(name: String): Symbol

  127. def unqualifiedIds: List[String]

    Another entry point for tab-completion, ids in scope

  128. def valueOfTerm(id: String): Option[AnyRef]

  129. val virtualDirectory: VirtualDirectory { def show(): Unit }

    directory to save .

    directory to save .class files to

  130. def visibleTermNames: List[Name]

  131. final def wait(): Unit

    Definition Classes
    AnyRef
    Annotations
    @throws()
  132. final def wait(arg0: Long, arg1: Int): Unit

    Definition Classes
    AnyRef
    Annotations
    @throws()
  133. final def wait(arg0: Long): Unit

    Definition Classes
    AnyRef
    Annotations
    @throws()
  134. def wildcardTypes: List[Type]

    Definition Classes
    Imports
  135. def withoutUnwrapping(op: ⇒ Unit): Unit

Deprecated Value Members

  1. lazy val compiler: IMain.this.global.type

    Annotations
    @deprecated
    Deprecated

    (Since version 2.9.0) Use global for access to the compiler instance.

Inherited from Imports

Inherited from AnyRef

Inherited from Any