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
Linear Supertypes
Known Subclasses
Type Hierarchy Learn more about scaladoc diagrams
Ordering
  1. Alphabetic
  2. By inheritance
Inherited
  1. IMain
  2. Imports
  3. AnyRef
  4. Any
Implicitly
  1. by any2stringadd
  2. by any2stringfmt
  3. by any2ArrowAssoc
  4. by any2Ensuring
  1. Hide All
  2. Show all
Learn more about member selection
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(initialSettings: 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. implicit class ReplTypeOps extends AnyRef

  4. 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. def +(other: String): String

    Implicit information
    This member is added by an implicit conversion from IMain to StringAdd performed by method any2stringadd in scala.Predef.
    Definition Classes
    StringAdd
  5. def ->[B](y: B): (IMain, B)

    Implicit information
    This member is added by an implicit conversion from IMain to ArrowAssoc[IMain] performed by method any2ArrowAssoc in scala.Predef.
    Definition Classes
    ArrowAssoc
    Annotations
    @inline()
  6. final def ==(arg0: AnyRef): Boolean

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

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

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

    Parse the ScalaSig to find type aliases

  10. def allDefHandlers: collection.immutable.List[(memberHandlers)#MemberDefHandler]

  11. def allDefSymbols: collection.immutable.List[Global.Symbol]

  12. def allDefinedNames: collection.immutable.List[Global.Name]

  13. def allHandlers: collection.immutable.List[(memberHandlers)#MemberHandler]

  14. def allImplicits: collection.immutable.List[Global.Name { ... /* 5 definitions in type refinement */ }]

  15. def allImportedNames: collection.immutable.List[Global.Name]

    Definition Classes
    Imports
  16. def allSeenTypes: collection.immutable.List[String]

  17. def apply[T](implicit arg0: ClassTag[T]): Global.Symbol

  18. def apply(name: String): Global.Symbol

    Translate a repl-defined identifier into a Symbol.

  19. final def asInstanceOf[T0]: T0

    Definition Classes
    Any
  20. def beQuietDuring[T](body: ⇒ T): T

    Temporarily be quiet

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

  22. def bind[T](name: String, value: T)(implicit arg0: reflect.api.JavaUniverse.TypeTag[T], arg1: ClassTag[T]): Result

  23. def bind(p: NamedParam): Result

  24. def bind(name: String, boundType: String, value: Any, modifiers: List[String] = Nil): 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

  25. def bindSyntheticValue(x: Any): Result

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

  27. def bindValue(x: Any): Result

  28. def classLoader: AbstractFileClassLoader

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

  30. def classSymbols: collection.immutable.List[Global.ClassSymbol]

  31. def cleanMemberDecl(owner: Global.Symbol, member: Global.Name): Global.Type

  32. def clearExecutionWrapper(): Unit

  33. def clone(): AnyRef

    Attributes
    protected[java.lang]
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  34. 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.

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

    Compile an nsc SourceFile.

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

  36. def compileSourcesKeepingRun(sources: SourceFile*): (Boolean, Run)

  37. def compileString(code: String): Boolean

    Compile a string.

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

  38. def compilerClasspath: Seq[URL]

  39. def debugging[T](msg: String)(res: T): T

  40. object deconstruct extends StructuredTypeStrings

  41. def definedSymbolList: collection.immutable.List[Global.Symbol]

  42. def definedSymbols: Set[Global.Symbol]

  43. def definedTerms: collection.immutable.List[Global.TermName]

  44. def definedTypes: collection.immutable.List[Global.TypeName]

  45. def definitionForName(name: Global.Name): Option[(memberHandlers)#MemberHandler]

  46. def directBind[T](name: String, value: T)(implicit arg0: reflect.api.JavaUniverse.TypeTag[T], arg1: ClassTag[T]): Result

  47. def directBind(p: NamedParam): Result

  48. def directBind(name: String, boundType: String, value: Any): Result

  49. final def ensureClassLoader(): Unit

  50. def ensuring(cond: (IMain) ⇒ Boolean, msg: ⇒ Any): IMain

    Implicit information
    This member is added by an implicit conversion from IMain to Ensuring[IMain] performed by method any2Ensuring in scala.Predef.
    Definition Classes
    Ensuring
  51. def ensuring(cond: (IMain) ⇒ Boolean): IMain

    Implicit information
    This member is added by an implicit conversion from IMain to Ensuring[IMain] performed by method any2Ensuring in scala.Predef.
    Definition Classes
    Ensuring
  52. def ensuring(cond: Boolean, msg: ⇒ Any): IMain

    Implicit information
    This member is added by an implicit conversion from IMain to Ensuring[IMain] performed by method any2Ensuring in scala.Predef.
    Definition Classes
    Ensuring
  53. def ensuring(cond: Boolean): IMain

    Implicit information
    This member is added by an implicit conversion from IMain to Ensuring[IMain] performed by method any2Ensuring in scala.Predef.
    Definition Classes
    Ensuring
  54. final def eq(arg0: AnyRef): Boolean

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

    Definition Classes
    AnyRef → Any
  56. def executionWrapper: String

  57. object exprTyper extends ExprTyper

  58. def finalize(): Unit

    Attributes
    protected[java.lang]
    Definition Classes
    AnyRef
    Annotations
    @throws( classOf[java.lang.Throwable] )
  59. def flatName(id: String): String

  60. def formatted(fmtstr: String): String

    Implicit information
    This member is added by an implicit conversion from IMain to StringFormat performed by method any2stringfmt in scala.Predef.
    Definition Classes
    StringFormat
    Annotations
    @inline()
  61. lazy val formatting: Formatting

  62. 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
  63. final def getClass(): Class[_]

    Definition Classes
    AnyRef → Any
  64. def getInterpreterClassLoader(): AbstractFileClassLoader

  65. lazy val global: Global

    the public, go through the future compiler

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

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

    Stubs for work in progress.

  68. def hashCode(): Int

    Definition Classes
    AnyRef → Any
  69. def implicitSymbols: collection.immutable.List[Global.Symbol]

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

    Definition Classes
    Imports
  71. def importHandlers: collection.immutable.List[(memberHandlers)#ImportHandler]

  72. def importedSymbols: collection.immutable.List[Global.Symbol]

    Definition Classes
    Imports
  73. def importedSymbolsBySource: List[(Global.Symbol, List[Global.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
  74. def importedTermNamed(name: String): Global.Symbol

    Definition Classes
    Imports
  75. def importedTermSymbols: collection.immutable.List[Global.TermSymbol]

    Definition Classes
    Imports
  76. def importedTerms: collection.immutable.List[Global.TermName]

    Definition Classes
    Imports
  77. def importedTypeSymbols: collection.immutable.List[Global.TypeSymbol]

    Definition Classes
    Imports
  78. def importedTypes: collection.immutable.List[Global.TypeName]

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

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

  81. def initializeSynchronous(): Unit

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

  83. 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.

  84. def interpretSynthetic(line: String): Result

  85. def isInitializeComplete: Boolean

  86. final def isInstanceOf[T0]: Boolean

    Definition Classes
    Any
  87. def isNoImports: Boolean

    Definition Classes
    Imports
  88. def isNoPredef: Boolean

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

  90. lazy val isettings: ISettings

    interpreter settings

  91. def languageSymbols: collection.immutable.List[Global.Symbol]

    Definition Classes
    Imports
  92. def languageWildcardHandlers: collection.immutable.List[(memberHandlers)#ImportHandler]

    Definition Classes
    Imports
  93. def languageWildcardSyms: List[Global.Symbol]

    Symbols whose contents are language-defined to be imported.

    Symbols whose contents are language-defined to be imported.

    Definition Classes
    Imports
  94. def languageWildcards: List[Global.Type]

    Definition Classes
    Imports
  95. def lastRequest: Request

  96. def lastWarnings: List[(Global.Position, String)]

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

  98. def methodSymbols: collection.immutable.List[Global.MethodSymbol]

  99. def mostRecentLine: String

  100. 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.

  101. def namedDefinedTerms: collection.immutable.List[Global.TermName]

  102. object naming extends Naming

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

    Definition Classes
    AnyRef
  104. def newCompiler(settings: Settings, reporter: Reporter): ReplGlobal

    Instantiate a compiler.

    Instantiate a compiler. Overridable.

    Attributes
    protected
  105. def normalizeNonPublic(tp: Global.Type): Global.Type

  106. final def notify(): Unit

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

    Definition Classes
    AnyRef
  108. def onlyTerms(xs: List[Global.Name]): collection.immutable.List[Global.TermName]

    Attributes
    protected
  109. def onlyTypes(xs: List[Global.Name]): collection.immutable.List[Global.TypeName]

    Attributes
    protected
  110. def optFlatName(id: String): Option[String]

  111. val out: JPrintWriter

    Attributes
    protected
  112. def parentClassLoader: ClassLoader

    Parent classloader.

    Parent classloader. Overridable.

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

  114. def pathToName(name: Global.Name): String

  115. def pathToTerm(id: String): String

  116. def pathToType(id: String): String

  117. def prevRequestList: collection.immutable.List[Request]

  118. def quietBind(p: NamedParam): Result

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

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

  121. def rebind(p: NamedParam): Result

  122. def recordRequest(req: Request): Unit

  123. lazy val repllog: Logger

  124. lazy val reporter: ReplReporter

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

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

  127. def requestForReqId(id: Int): Option[Request]

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

  129. def reset(): Unit

    Reset this interpreter, forgetting all user-specified requests.

  130. def resetClassLoader(): Unit

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

  132. def runtimeTypeOfTerm(id: String): Global.Type

  133. def sessionImportedSymbols: collection.immutable.List[Global.Symbol]

    Definition Classes
    Imports
  134. def sessionWildcards: List[Global.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
  135. def setContextClassLoader(): Unit

  136. def setExecutionWrapper(code: String): Unit

  137. def settings: Settings

  138. def showCodeIfDebugging(code: String): Unit

  139. def symbolDefString(sym: Global.Symbol): String

  140. def symbolOfLine(code: String): Global.Symbol

  141. def symbolOfTerm(id: String): Global.Symbol

  142. def symbolOfType(id: String): Global.Symbol

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

    Definition Classes
    AnyRef
  144. def terms[T](implicit arg0: ClassTag[T]): Global.Symbol

  145. def terms(name: String): Global.Symbol

  146. def toString(): String

    Definition Classes
    AnyRef → Any
  147. def treesForRequestId(id: Int): List[Global.Tree]

  148. def typeOfExpression(expr: String, silent: Boolean = true): Global.Type

  149. def typeOfTerm(id: String): Global.Type

  150. def types[T](implicit arg0: ClassTag[T]): Global.Symbol

  151. def types(name: String): Global.Symbol

  152. def unqualifiedIds: collection.immutable.List[String]

    Another entry point for tab-completion, ids in scope

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

  154. val virtualDirectory: VirtualDirectory

    Leading with the eagerly evaluated.

  155. def visibleTermNames: List[Global.Name]

  156. final def wait(): Unit

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

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

    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  159. def wildcardTypes: collection.immutable.List[Global.Type]

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

  161. def withoutWarnings[T](body: ⇒ T): T

  162. def [B](y: B): (IMain, B)

    Implicit information
    This member is added by an implicit conversion from IMain to ArrowAssoc[IMain] performed by method any2ArrowAssoc in scala.Predef.
    Definition Classes
    ArrowAssoc

Shadowed Implicit Value Members

  1. val self: Any

    Implicit information
    This member is added by an implicit conversion from IMain to StringAdd performed by method any2stringadd in scala.Predef.
    Shadowing
    This implicitly inherited member is ambiguous. One or more implicitly inherited members have similar signatures, so calling this member may produce an ambiguous implicit conversion compiler error.
    To access this member you can use a type ascription:
    (iMain: StringAdd).self
    Definition Classes
    StringAdd
  2. val self: Any

    Implicit information
    This member is added by an implicit conversion from IMain to StringFormat performed by method any2stringfmt in scala.Predef.
    Shadowing
    This implicitly inherited member is ambiguous. One or more implicitly inherited members have similar signatures, so calling this member may produce an ambiguous implicit conversion compiler error.
    To access this member you can use a type ascription:
    (iMain: StringFormat).self
    Definition Classes
    StringFormat

Deprecated Value Members

  1. lazy val compiler: global.type

    Annotations
    @deprecated
    Deprecated

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

  2. def x: IMain

    Implicit information
    This member is added by an implicit conversion from IMain to ArrowAssoc[IMain] performed by method any2ArrowAssoc in scala.Predef.
    Shadowing
    This implicitly inherited member is ambiguous. One or more implicitly inherited members have similar signatures, so calling this member may produce an ambiguous implicit conversion compiler error.
    To access this member you can use a type ascription:
    (iMain: ArrowAssoc[IMain]).x
    Definition Classes
    ArrowAssoc
    Annotations
    @deprecated
    Deprecated

    (Since version 2.10.0) Use leftOfArrow instead

  3. def x: IMain

    Implicit information
    This member is added by an implicit conversion from IMain to Ensuring[IMain] performed by method any2Ensuring in scala.Predef.
    Shadowing
    This implicitly inherited member is ambiguous. One or more implicitly inherited members have similar signatures, so calling this member may produce an ambiguous implicit conversion compiler error.
    To access this member you can use a type ascription:
    (iMain: Ensuring[IMain]).x
    Definition Classes
    Ensuring
    Annotations
    @deprecated
    Deprecated

    (Since version 2.10.0) Use resultOfEnsuring instead

Inherited from Imports

Inherited from AnyRef

Inherited from Any

Inherited by implicit conversion any2stringadd from IMain to StringAdd

Inherited by implicit conversion any2stringfmt from IMain to StringFormat

Inherited by implicit conversion any2ArrowAssoc from IMain to ArrowAssoc[IMain]

Inherited by implicit conversion any2Ensuring from IMain to Ensuring[IMain]

Ungrouped