2010-04-10 16 views
5

estoy generando el AST Scala usando el siguiente código:Generación Scala AST para el método recursivo

val setting = new Settings(error) 
    val reporter = new ConsoleReporter(setting, in, out) { 
     override def displayPrompt =() 
    } 

    val compiler = new Global(setting, reporter) with ASTExtractor{ 
     override def onlyPresentation = true 
    } 
    //setting.PhasesSetting("parser", "parserPhase") 
    val run = new compiler.Run 
    val sourceFiles:List[String] = List("Test.scala") 
    run.compile(sourceFiles.toList) 

supongo que este es el código estándar que se utiliza para ejecutar el compilador en el código y generar el AST para trabajar. El código anterior funcionó bien para cualquier código Scala válido en Test.scala hasta ahora. Cuando utilizo una función recursiva en Test.scala, como

def xMethod (x: Int): Int = if (x == 0) -1 otro xMethod (x-1)

Me da una java.lang.NullPointerException. Las principales líneas de la traza de la pila se ven así

at scala.tools.nsc.typechecker.Typers$Typer.checkNoDoubleDefsAndAddSynthetics$1(Typers.scala:2170) 
at scala.tools.nsc.typechecker.Typers$Typer.typedStats(Typers.scala:2196) 
at scala.tools.nsc.typechecker.Typers$Typer.typedBlock(Typers.scala:1951) 
at scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:3815) 
at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:4124) 
at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:4177) 
at scala.tools.nsc.transform.TailCalls$TailCallElimination.transform(TailCalls.scala:199) 

El código funciona bien para un método como

def aMethod(c:Int):Int = { bMethod(c) } 
def bMethod(x:Int):Int = aMethod(x) 

Por favor, hágamelo saber si las funciones recursivas necesitan ningún otro ajuste.

Respuesta