diff options
author | Dmitry Petrashko <dmitry.petrashko@gmail.com> | 2015-07-28 16:20:48 +0200 |
---|---|---|
committer | Dmitry Petrashko <dmitry.petrashko@gmail.com> | 2015-07-28 18:23:34 +0200 |
commit | 3377de5bfe302b030530de97d27207afb7d963d0 (patch) | |
tree | 9a31e0219eca66fa8a43264cfd14a8a12d42a44b /src/dotty/tools/dotc/transform/Memoize.scala | |
parent | 7cfa2e1e0ac3703161e33227d5729ddd81983f99 (diff) | |
download | dotty-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.scala | 22 |
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) = { |