blob: 396f2deeba2d3a0278a459fafa900300309e4d02 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
/* NSC -- new Scala compiler
* Copyright 2005-2011 LAMP/EPFL
* @author Paul Phillips
*/
package scala.tools.nsc
package interpreter
trait Naming {
val global: Global
import global.{ Name, nme }
import nme.{
INTERPRETER_VAR_PREFIX, INTERPRETER_SYNTHVAR_PREFIX, INTERPRETER_LINE_PREFIX
}
/** Generates names pre0, pre1, etc. via calls to apply method */
class NameCreator(pre: String) {
private var x = -1
var mostRecent: String = ""
def apply(): String = {
x += 1
mostRecent = pre + x.toString
mostRecent
}
def reset(): Unit = x = -1
def didGenerate(name: String) =
(name startsWith pre) && ((name drop pre.length) forall (_.isDigit))
}
private lazy val line = new NameCreator(INTERPRETER_LINE_PREFIX) // line name, like line$0
private lazy val userVar = new NameCreator(INTERPRETER_VAR_PREFIX) // var name, like res0
private lazy val internalVar = new NameCreator(INTERPRETER_SYNTHVAR_PREFIX) // internal var name, like $synthvar0
def isUserVarName(name: String) = userVar didGenerate name
def isInternalVarName(name: String): Boolean = internalVar didGenerate name
def isInternalVarName(name: Name): Boolean = internalVar didGenerate name.toString
def freshLineName() = line()
def freshUserVarName() = userVar()
def freshInternalVarName() = internalVar()
def resetAllCreators() {
line.reset()
userVar.reset()
internalVar.reset()
}
def mostRecentVar = userVar.mostRecent
}
|