Skip to content
Snippets Groups Projects
Commit 70b011d7 authored by Etienne Kneuss's avatar Etienne Kneuss
Browse files

Fix handling of fields of case-classes v.s. method calls

parent ba449924
No related branches found
No related tags found
No related merge requests found
......@@ -575,14 +575,6 @@ trait ASTExtractors {
}
}
// used for case classes selectors.
object ExParameterlessMethodCall {
def unapply(tree: Select): Option[(Tree,Name)] = tree match {
case Select(lhs, n) => Some((lhs, n))
case _ => None
}
}
object ExPatternMatching {
def unapply(tree: Match): Option[(Tree,List[CaseDef])] =
if(tree != null) Some((tree.selector, tree.cases)) else None
......
......@@ -667,22 +667,6 @@ trait CodeExtraction extends ASTExtractors {
outOfSubsetError(current, "Unknown case object "+sym.name)
}
case ExParameterlessMethodCall(t,n) if extractTree(t).getType.isInstanceOf[CaseClassType] =>
val selector = extractTree(t)
val selType = selector.getType.asInstanceOf[CaseClassType]
val fieldID = selType.fields.find(_.id.name == n.toString) match {
case None =>
outOfSubsetError(current, "Invalid method or field invocation (not a case class arg?)")
case Some(vd) =>
vd.id
}
CaseClassSelector(selType, selector, fieldID)
case ExTuple(tpes, exprs) =>
val tupleExprs = exprs.map(e => extractTree(e))
val tupleType = TupleType(tupleExprs.map(expr => expr.getType))
......@@ -1112,6 +1096,12 @@ trait CodeExtraction extends ASTExtractors {
MethodInvocation(rec, cd, fd.typed(newTps), args)
case (IsTyped(rec, cct: CaseClassType), name, Nil) if cct.fields.exists(_.id.name == name) =>
val fieldID = cct.fields.find(_.id.name == name).get.id
CaseClassSelector(cct, rec, fieldID)
case (IsTyped(_, SetType(base)), "min", Nil) =>
SetMin(rrec).setType(base)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment