Advertisement
Guest User

immutable SymbolTable

a guest
Mar 1st, 2015
255
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scala 0.80 KB | None | 0 0
  1. object SymbolTable {
  2.   val empty = new SymbolTable(Map.empty[String, Symbol] :: Nil)
  3. }
  4.  
  5. final class SymbolTable private(scopes: List[Map[String, Symbol]]) {
  6.   def inCurrentScope(name: String): Boolean = scopes.head.contains(name)
  7.  
  8.   def resolve(name: String): Option[Symbol] = scopes.view.map(_.get(name)).find(!_.isEmpty).flatten
  9.  
  10.   def inScope(name: String): Boolean = !resolve(name).isEmpty
  11.  
  12.   def isTypeAlias(name: String): Boolean = resolve(name).exists(_.isInstanceOf[TypeAlias])
  13.  
  14.   def add(name: String, symbol: Symbol): SymbolTable = new SymbolTable(scopes.head + (name -> symbol) :: scopes.tail)
  15.  
  16.   def openScope: SymbolTable = new SymbolTable(Map.empty[String, Symbol] :: scopes)
  17.  
  18.   def closeScope: SymbolTable = new SymbolTable(scopes.tail)
  19.  
  20.   override def toString = scopes.toString
  21. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement