Skip to content
Snippets Groups Projects
Commit 1e3eece2 authored by Philippe Suter's avatar Philippe Suter
Browse files

fixed PM trees

parent d38069bc
Branches
Tags
No related merge requests found
...@@ -66,6 +66,7 @@ class AnalysisComponent(val global: Global, val pluginInstance: FunCheckPlugin) ...@@ -66,6 +66,7 @@ class AnalysisComponent(val global: Global, val pluginInstance: FunCheckPlugin)
tree match { tree match {
case c @ ClassDef(mods, name, tparams, impl) => { case c @ ClassDef(mods, name, tparams, impl) => {
val s = c.symbol val s = c.symbol
println(s) println(s)
if(s.isTrait) if(s.isTrait)
......
...@@ -66,15 +66,14 @@ see examples in: ...@@ -66,15 +66,14 @@ see examples in:
} }
case class SimpleCase(pattern: Pattern, rhs: Expr) extends MatchCase 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 sealed abstract class Pattern
// c: Class case class InstanceOfPattern(binder: Option[Identifier], classTypeDef: ClassTypeDef) extends Pattern // c: Class
case class InstanceOfPattern(binder: Option[Identifier], klass: ClassDef) extends Pattern case class WildcardPattern(binder: Option[Identifier]) extends Pattern // c @ _
// c @ Constructor(...) case class ExtractorPattern(binder: Option[Identifier], subPatterns: Seq[Pattern]) extends Pattern // c @ Extractor(...,...)
case class ConstructorPattern(binder: Option[Identifier]) extends Pattern
// c @ _
case class WildcardPattern(binder: Option[Identifier]) extends Pattern
// I suggest we skip Seq stars for now. // I suggest we skip Seq stars for now.
/* Propositional logic */ /* Propositional logic */
...@@ -240,8 +239,14 @@ see examples in: ...@@ -240,8 +239,14 @@ see examples in:
type VarDecls = Seq[VarDecl] type VarDecls = Seq[VarDecl]
sealed abstract class Definition(name : Identifier) 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 ValDef(name : Identifier, value : Expr) extends Definition(name)
case class FunDef(name : Identifier, args : VarDecls, body : Expr) extends Definition(name) { case class FunDef(name : Identifier, args : VarDecls, body : Expr) extends Definition(name) {
lazy val argTypes : Seq[TypeTree] = args.map(_._2) lazy val argTypes : Seq[TypeTree] = args.map(_._2)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment