blob: 5dbec3e5a586a4d3fc3e0cca149fc075527bbf18 (
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
|
package dotty.tools
package dotc
package util
import scala.collection.mutable
import core.Names.TermName
import core.NameKinds.UniqueNameKind
import core.StdNames.str
abstract class FreshNameCreator {
def newName(prefix: TermName, unique: UniqueNameKind): TermName
}
object FreshNameCreator {
class Default extends FreshNameCreator {
protected var counter = 0
protected val counters = mutable.AnyRefMap[String, Int]() withDefaultValue 0
/**
* Create a fresh name with the given prefix. It is guaranteed
* that the returned name has never been returned by a previous
* call to this function (provided the prefix does not end in a digit).
*/
def newName(prefix: TermName, unique: UniqueNameKind): TermName = {
val key = str.sanitize(prefix.toString + unique.separator)
counters(key) += 1
val counter = counters(key)
prefix.derived(unique.NumberedInfo(counter))
}
}
}
|