From c869436534e963d4e053ebd5414bf785a34858cf Mon Sep 17 00:00:00 2001 From: Philippe Suter <philippe.suter@gmail.com> Date: Mon, 24 May 2010 20:14:17 +0000 Subject: [PATCH] switching to SSH because scalac is too slow on this machine --- ParseMe.scala | 1 - src/funcheck/CodeExtraction.scala | 20 +++++++++++--------- src/funcheck/Extractors.scala | 5 ++++- src/purescala/Definitions.scala | 10 +++++++--- src/purescala/PrettyPrinter.scala | 23 +++++++++++++++++++++++ 5 files changed, 45 insertions(+), 14 deletions(-) diff --git a/ParseMe.scala b/ParseMe.scala index 62be61d75..06e6c03b2 100644 --- a/ParseMe.scala +++ b/ParseMe.scala @@ -1,7 +1,6 @@ import scala.collection.immutable.Set object ParseMe { - sealed abstract class Tree case class Node(left: Tree, value: Int, right: Tree) extends Tree case class Leaf() extends Tree diff --git a/src/funcheck/CodeExtraction.scala b/src/funcheck/CodeExtraction.scala index b9877ef63..c9d257546 100644 --- a/src/funcheck/CodeExtraction.scala +++ b/src/funcheck/CodeExtraction.scala @@ -79,16 +79,18 @@ trait CodeExtraction extends Extractors { case ExAbstractClass(o2, sym) => { if(scalaClassNames.contains(o2)) { unit.error(t.pos, "A class with the same name already exists.") + } else { + scalaClassSyms += (sym -> o2) + scalaClassNames += o2 } - scalaClassSyms += (sym -> o2) - scalaClassNames += o2 } case ExCaseClass(o2, sym, tpl) => { if(scalaClassNames.contains(o2)) { unit.error(t.pos, "A class with the same name already exists.") + } else { + scalaClassSyms += (sym -> o2) + scalaClassNames += o2 } - scalaClassSyms += (sym -> o2) - scalaClassNames += o2 // println("***") // println(tpl) // println("***") @@ -133,17 +135,17 @@ trait CodeExtraction extends Extractors { }) // TODO - // resolve all inheritance links (look at // add all fields to case classes - println(classesToClasses) + // println(classesToClasses) + classDefs = classesToClasses.valuesIterator.toList tmpl.body.foreach( _ match { case ExCaseClassSyntheticJunk() => ; - case ExObjectDef(o2, t2) => { objectDefs = extractObjectDef(o2, t2) :: objectDefs } - case ExAbstractClass(o2,sym) => ; //println("That seems to be an abstract class: [[" + o2 + "]]") - case ExCaseClass(_,_,_) => ; //println(o2) + // case ExObjectDef(o2, t2) => { objectDefs = extractObjectDef(o2, t2) :: objectDefs } + case ExAbstractClass(o2,sym) => ; + case ExCaseClass(_,_,_) => ; case ExConstructorDef() => ; case ExMainFunctionDef() => ; case ExFunctionDef(n,p,t,b) => { funDefs = extractFunDef(n,p,t,b) :: funDefs } diff --git a/src/funcheck/Extractors.scala b/src/funcheck/Extractors.scala index b0e1c8d08..72c4d6f78 100644 --- a/src/funcheck/Extractors.scala +++ b/src/funcheck/Extractors.scala @@ -76,7 +76,10 @@ trait Extractors { object ExCaseClass { def unapply(cd: ClassDef): Option[(String,Symbol,Tree)] = cd match { case ClassDef(_, name, tparams, impl) if (cd.symbol.isCase && !cd.symbol.isAbstractClass && tparams.isEmpty && impl.body.size >= 8) => { - + impl.children.filter(child => child match { + case DefDef(_, nn, _, _, _, _) => true + case _ => false + }).foreach(child => println(child)) Some((name.toString, cd.symbol, impl)) } case _ => None diff --git a/src/purescala/Definitions.scala b/src/purescala/Definitions.scala index 13792638d..48d22082e 100644 --- a/src/purescala/Definitions.scala +++ b/src/purescala/Definitions.scala @@ -86,19 +86,23 @@ object Definitions { * implicitely define extractors) and explicitely defined unapply methods. */ sealed trait ExtractorTypeDef + /** Abstract classes. */ object AbstractClassDef { def unapply(acd: AbstractClassDef): Option[(Identifier,Option[AbstractClassDef])] = { - Some((acd.id, acd.parent)) + if(acd == null) None else Some((acd.id, acd.parent)) } } - - /** Abstract classes. */ class AbstractClassDef(val id: Identifier, var parent: Option[AbstractClassDef]) extends ClassTypeDef { var fields: VarDecls = Nil val isAbstract = true } /** Case classes. */ + object CaseClassDef { + def unapply(ccd: CaseClassDef): Option[(Identifier,Option[AbstractClassDef],VarDecls)] = { + if(ccd == null) None else Some((ccd.id, ccd.parent, ccd.fields)) + } + } class CaseClassDef(val id: Identifier, var parent: Option[AbstractClassDef]) extends ClassTypeDef with ExtractorTypeDef { var fields: VarDecls = Nil val isAbstract = false diff --git a/src/purescala/PrettyPrinter.scala b/src/purescala/PrettyPrinter.scala index 597d11232..3d302749d 100644 --- a/src/purescala/PrettyPrinter.scala +++ b/src/purescala/PrettyPrinter.scala @@ -152,6 +152,29 @@ object PrettyPrinter { nsb } + case CaseClassDef(id, parent, varDecls) => { + var nsb = sb + ind(nsb) + nsb.append("case class ") + nsb.append(id) + nsb.append("(") + var c = 0 + val sz = varDecls.size + + varDecls.foreach(vd => { + nsb = pp(vd.tpe, nsb) + nsb.append(" ") + nsb.append(vd.id.toString) + if(c < sz - 1) { + nsb.append(", ") + } + c = c + 1 + }) + nsb.append(")") + parent.foreach(p => nsb.append(" extends " + p.id)) + nsb + } + case FunDef(id, rt, args, body, pre, post) => { var nsb = sb -- GitLab