From 4952f562e12e676040dabde0b4992d777fc3138e Mon Sep 17 00:00:00 2001
From: Lior Spach <ls12@inf.ufpr.br>
Date: Mon, 15 Jun 2015 03:18:42 -0300
Subject: [PATCH] update TabSimb.scala

---
 src/main/scala/other/TabelaSimb.scala | 17 ++++++++++++++---
 1 file changed, 14 insertions(+), 3 deletions(-)

diff --git a/src/main/scala/other/TabelaSimb.scala b/src/main/scala/other/TabelaSimb.scala
index a4a97d0..799fe14 100644
--- a/src/main/scala/other/TabelaSimb.scala
+++ b/src/main/scala/other/TabelaSimb.scala
@@ -1,7 +1,7 @@
 package other
 import scala.annotation.tailrec
 
-abstract class Entrada(val id:String)
+class Entrada(val id:String)
 case class Funcao (override val id:String, paramInfo:List[Param], desloc:Int,
     nvLex:Int, rotEntrada:String) extends Entrada(id)
 case class Procedimento(override val id:String, paramInfo:List[Param],
@@ -26,7 +26,6 @@ object TabelaSimb {
   }
   
   def getLastProc(nvLex:Int) = {
-    print
     table.find {
       case p:Procedimento => if (p.nvLex==nvLex) true else false
       case f:Funcao => if (f.nvLex==nvLex) true else false
@@ -34,7 +33,19 @@ object TabelaSimb {
     }.get
   }
   
-  @annotation.tailrec
+  @tailrec 
+  def temParamOuVarComMesmoId(nome:String, rest:List[Entrada] = table):Boolean = { //No escopo da ultima funcao/proc
+    val e = getById(nome)
+    rest match {
+      case (p:Procedimento) :: xs => false 
+      case (f:Funcao) :: xs       => false
+      case (v:Var) :: xs   => if (v.id == nome) true else temParamOuVarComMesmoId(nome, xs)
+      case (p:Param) :: xs => if (p.id == nome) true else temParamOuVarComMesmoId(nome, xs)
+      case _ => false
+    }
+  }
+  
+  @tailrec
   def numVarsLocais(nvLex:Int, count:Int=0, rest:List[Entrada] = table):Int = rest match {
     case (v:Var) :: xs => numVarsLocais(nvLex, count+1, xs)
     case (p:Procedimento) :: xs => if (p.nvLex>nvLex) numVarsLocais(nvLex,count,xs) else count 
-- 
GitLab