aboutsummaryrefslogtreecommitdiff
path: root/src/dotty/tools/dotc/transform/Memoize.scala
diff options
context:
space:
mode:
authorDmitry Petrashko <dmitry.petrashko@gmail.com>2015-07-28 16:20:48 +0200
committerDmitry Petrashko <dmitry.petrashko@gmail.com>2015-07-28 18:23:34 +0200
commit3377de5bfe302b030530de97d27207afb7d963d0 (patch)
tree9a31e0219eca66fa8a43264cfd14a8a12d42a44b /src/dotty/tools/dotc/transform/Memoize.scala
parent7cfa2e1e0ac3703161e33227d5729ddd81983f99 (diff)
downloaddotty-3377de5bfe302b030530de97d27207afb7d963d0.tar.gz
dotty-3377de5bfe302b030530de97d27207afb7d963d0.tar.bz2
dotty-3377de5bfe302b030530de97d27207afb7d963d0.zip
Fix #745, memoise should be able to get type of field from setter.
Diffstat (limited to 'src/dotty/tools/dotc/transform/Memoize.scala')
-rw-r--r--src/dotty/tools/dotc/transform/Memoize.scala22
1 files changed, 14 insertions, 8 deletions
diff --git a/src/dotty/tools/dotc/transform/Memoize.scala b/src/dotty/tools/dotc/transform/Memoize.scala
index cf3011bc8..728005cab 100644
--- a/src/dotty/tools/dotc/transform/Memoize.scala
+++ b/src/dotty/tools/dotc/transform/Memoize.scala
@@ -45,14 +45,20 @@ import Decorators._
override def transformDefDef(tree: DefDef)(implicit ctx: Context, info: TransformerInfo): Tree = {
val sym = tree.symbol
- def newField = ctx.newSymbol(
- owner = ctx.owner,
- name = sym.name.asTermName.fieldName,
- flags = Private | (if (sym is Stable) EmptyFlags else Mutable),
- info = sym.info.resultType,
- coord = tree.pos)
- .withAnnotationsCarrying(sym, defn.FieldMetaAnnot)
- .enteredAfter(thisTransform)
+ def newField = {
+ val fieldType =
+ if (sym.isGetter) sym.info.resultType
+ else /*sym.isSetter*/ sym.info.firstParamTypes.head
+
+ ctx.newSymbol(
+ owner = ctx.owner,
+ name = sym.name.asTermName.fieldName,
+ flags = Private | (if (sym is Stable) EmptyFlags else Mutable),
+ info = fieldType,
+ coord = tree.pos)
+ .withAnnotationsCarrying(sym, defn.FieldMetaAnnot)
+ .enteredAfter(thisTransform)
+ }
/** Can be used to filter annotations on getters and setters; not used yet */
def keepAnnotations(denot: SymDenotation, meta: ClassSymbol) = {