From 1e3eece29bceab9e7aac59d6536374af39433071 Mon Sep 17 00:00:00 2001 From: Philippe Suter <philippe.suter@gmail.com> Date: Sat, 6 Jun 2009 09:42:02 +0000 Subject: [PATCH] fixed PM trees --- src/funcheck/AnalysisComponent.scala | 1 + src/funcheck/purescala/Trees.scala | 23 ++++++++++++++--------- 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/src/funcheck/AnalysisComponent.scala b/src/funcheck/AnalysisComponent.scala index 153074024..fbe462a71 100644 --- a/src/funcheck/AnalysisComponent.scala +++ b/src/funcheck/AnalysisComponent.scala @@ -66,6 +66,7 @@ class AnalysisComponent(val global: Global, val pluginInstance: FunCheckPlugin) tree match { case c @ ClassDef(mods, name, tparams, impl) => { val s = c.symbol + println(s) if(s.isTrait) diff --git a/src/funcheck/purescala/Trees.scala b/src/funcheck/purescala/Trees.scala index 3b134bac0..4f26db421 100644 --- a/src/funcheck/purescala/Trees.scala +++ b/src/funcheck/purescala/Trees.scala @@ -66,15 +66,14 @@ see examples in: } case class SimpleCase(pattern: Pattern, rhs: Expr) extends MatchCase - case class GuardedCase(pattern: Pattern, guard: Expr, rhs: Expr) extends MatchCase + case class GuardedCase(pattern: Pattern, guard: Expr, rhs: Expr) extends MatchCase { + assert(guard.getType == BooleanType) + } sealed abstract class Pattern - // c: Class - case class InstanceOfPattern(binder: Option[Identifier], klass: ClassDef) extends Pattern - // c @ Constructor(...) - case class ConstructorPattern(binder: Option[Identifier]) extends Pattern - // c @ _ - case class WildcardPattern(binder: Option[Identifier]) extends Pattern + case class InstanceOfPattern(binder: Option[Identifier], classTypeDef: ClassTypeDef) extends Pattern // c: Class + case class WildcardPattern(binder: Option[Identifier]) extends Pattern // c @ _ + case class ExtractorPattern(binder: Option[Identifier], subPatterns: Seq[Pattern]) extends Pattern // c @ Extractor(...,...) // I suggest we skip Seq stars for now. /* Propositional logic */ @@ -240,8 +239,14 @@ see examples in: type VarDecls = Seq[VarDecl] sealed abstract class Definition(name : Identifier) - case class CaseClassDef(name : Identifier, fields : VarDecls) extends Definition(name) - case class ClassDef(name : Identifier, fields : VarDecls) extends Definition(name) + + /** Useful because case classes and classes are somewhat unified in some + * patterns (of pattern-matching, that is) */ + trait ClassTypeDef + + case class CaseClassDef(name : Identifier, fields : VarDecls) extends Definition(name) with ClassTypeDef + case class ClassDef(name : Identifier, fields : VarDecls) extends Definition(name) with ClassTypeDef + case class ValDef(name : Identifier, value : Expr) extends Definition(name) case class FunDef(name : Identifier, args : VarDecls, body : Expr) extends Definition(name) { lazy val argTypes : Seq[TypeTree] = args.map(_._2) -- GitLab