spark.repl

SparkIMain

class SparkIMain extends SparkImports

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 a single member named "$export". 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
SparkIMain
Linear Supertypes
SparkImports, AnyRef, Any
Known Subclasses
Ordering
  1. Alphabetic
  2. By inheritance
Inherited
  1. Hide All
  2. Show all
  1. SparkIMain
  2. SparkImports
  3. AnyRef
  4. Any
Visibility
  1. Public
  2. All

Instance Constructors

  1. new SparkIMain()

  2. new SparkIMain(settings: Settings)

    construct an interpreter that reports to Console

  3. new SparkIMain(settings: Settings, out: PrintWriter)

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 DBG(s: ⇒ String): Unit

  7. val SPARK_DEBUG_REPL: Boolean

  8. def addImports(ids: String*): Result

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

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

    Parse the ScalaSig to find type aliases

  11. def allDefinedNames: List[Name]

  12. def allImplicits: List[Name]

  13. def allSeenTypes: List[String]

  14. final def asInstanceOf[T0]: T0

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

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

    Temporarily be quiet

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

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

  19. def bind(p: NamedParam): Result

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

  21. def bindValue(x: Any): Result

  22. def classLoader: AbstractFileClassLoader

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

  24. val classServer: HttpServer

    Jetty server that will serve our classes to worker nodes

  25. def clearExecutionWrapper(): Unit

  26. def clone(): AnyRef

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

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

    Compile an nsc SourceFile.

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

  29. def compileString(code: String): Boolean

    Compile a string.

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

  30. lazy val compilerClasspath: List[URL]

    the compiler's classpath, as URL's

  31. def createLineManager(): Manager

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

  33. def definedSymbols: Set[Symbol]

  34. def definedTerms: List[TermName]

  35. def definedTypes: List[TypeName]

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

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

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

    Definition Classes
    AnyRef → Any
  39. def executionWrapper: String

  40. def finalize(): Unit

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

  42. lazy val formatting: Formatting

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

  44. final def getClass(): java.lang.Class[_]

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

  46. lazy val global: Global

    the public, go through the future compiler

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

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

    Stubs for work in progress.

  49. def hashCode(): Int

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

    Definition Classes
    SparkImports
  51. def implicitSymbolsBySource: List[(Symbol, List[Symbol])]

    Definition Classes
    SparkImports
  52. def importHandlers: List[ImportHandler]

  53. def importedSymbols: List[Symbol]

    Definition Classes
    SparkImports
  54. 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
    SparkImports
  55. def importedTermNamed(name: String): Option[TermSymbol]

    Definition Classes
    SparkImports
  56. def importedTermSymbols: List[TermSymbol]

    Definition Classes
    SparkImports
  57. def importedTerms: List[TermName]

    Definition Classes
    SparkImports
  58. def importedTypeSymbols: List[TypeSymbol]

    Definition Classes
    SparkImports
  59. def importedTypes: List[TypeName]

    Definition Classes
    SparkImports
  60. def importsCode(wanted: Set[Name]): ComputedImports

    Attributes
    protected
    Definition Classes
    SparkImports
  61. def initialize(): Unit

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

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

    line

    ...

    returns

    ...

  64. def isInitializeComplete: Boolean

  65. final def isInstanceOf[T0]: Boolean

    Definition Classes
    Any
  66. def isParseable(line: String): Boolean

  67. lazy val isettings: SparkISettings

    interpreter settings

  68. def languageSymbols: List[Symbol]

    Definition Classes
    SparkImports
  69. def languageWildcardHandlers: List[ImportHandler]

    Definition Classes
    SparkImports
  70. def languageWildcardSyms: List[Symbol]

    Symbols whose contents are language-defined to be imported.

    Symbols whose contents are language-defined to be imported.

    Definition Classes
    SparkImports
  71. def languageWildcards: List[Type]

    Definition Classes
    SparkImports
  72. lazy val lineManager: Manager

  73. lazy val memberHandlers: SparkMemberHandlers { val intp: SparkIMain.this.type }

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

  75. object naming extends Naming

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

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

    Instantiate a compiler.

    Instantiate a compiler. Subclasses can override this to change the compiler class used by this interpreter.

    Attributes
    protected
  78. final def notify(): Unit

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

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

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

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

  83. val out: PrintWriter

    Attributes
    protected
  84. val outputDir: File

    Local directory to save .

    Local directory to save .class files too

  85. def parentClassLoader: ClassLoader

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

    Parse a line into a sequence of trees.

    Parse a line into a sequence of trees. Returns None if the input is incomplete.

  87. def pathToName(name: Name): String

  88. def pathToTerm(id: String): String

  89. def pathToType(id: String): String

  90. def prevRequestList: List[Request]

    Attributes
    protected
  91. var printResults: Boolean

    whether to print out result lines

  92. def quietBind(p: NamedParam): Result

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

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

  95. def rebind(p: NamedParam): Result

  96. def recordRequest(req: Request): Unit

  97. lazy val reporter: ConsoleReporter

    reporter

  98. def reset(): Unit

    Reset this interpreter, forgetting all user-specified requests.

  99. def resetClassLoader(): Unit

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

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

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

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

  104. def sessionImportedSymbols: List[Symbol]

    Definition Classes
    SparkImports
  105. 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
    SparkImports
  106. def setContextClassLoader(): Unit

  107. def setExecutionWrapper(code: String): Unit

  108. val settings: Settings

  109. def showCodeIfDebugging(code: String): Unit

  110. def symbolDefString(sym: Symbol): String

  111. def symbolOfTerm(id: String): Symbol

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

    Definition Classes
    AnyRef
  113. def toString(): String

    Definition Classes
    AnyRef → Any
  114. var totalSilence: Boolean

    whether to print errors

  115. def typeOfExpression(expr: String): Option[Type]

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

  117. def unqualifiedIds: List[String]

    Another entry point for tab-completion, ids in scope

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

  119. val virtualDirectory: PlainFile

    Scala compiler virtual directory for outputDir

  120. def visibleTermNames: List[Name]

  121. final def wait(): Unit

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

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

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

    Definition Classes
    SparkImports
  125. def withoutBindingLastException[T](operation: ⇒ T): T

    Temporarily stop binding lastException

  126. def withoutUnwrapping(op: ⇒ Unit): Unit

Deprecated Value Members

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

    Annotations
    @deprecated
    Deprecated

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

Inherited from SparkImports

Inherited from AnyRef

Inherited from Any