Skip to content

Memoize: duplicate scala2 behaviour: don't create fields for final vals. #773

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 11 commits into from
Sep 14, 2015

Conversation

DarkDimius
Copy link
Contributor

This affect initialisation order and we rely on artifacts of initialisation order in Dotty.

@odersky
Copy link
Contributor

odersky commented Aug 24, 2015

/rebuild

@DarkDimius
Copy link
Contributor Author

@odersky your proposed code will perform transformation when stats are not idempotent. Is this intended?

@DarkDimius
Copy link
Contributor Author

It is not yet ready for review. It fails the supposed test.

@odersky
Copy link
Contributor

odersky commented Aug 24, 2015

@DarkDimius: No, notice the isPureExpr guard. That will do the right test, also for blocks.

@odersky
Copy link
Contributor

odersky commented Sep 8, 2015

Rebased to master and added fixes to make this work.

@odersky
Copy link
Contributor

odersky commented Sep 8, 2015

Also, applied my own earlier suggested patches.

DarkDimius and others added 11 commits September 14, 2015 13:36
This affect initialisation order and we rely on artifacts of initialisation order in Dotty.
A TermRef representing a constant value needs to be
considered a constant when folding.
Previously, a constant right hand side was not propagated
to the type of a final val that implemented another val
with a given type. The inherited type was used instead.
This means final vals implementing abstract vals
get evaluated too late.
Now, PostTyper replaces constant expressions with literals. If we wait any longer
then any tree rewriting of an application node would have to do constant folding again,
which is a hassle.

With the previous late Literalize phase, constant expressions consisting of operations
and arguments lost their constantness in PostTyper.
A constant expression with pure arguments is pure. Previously, this
was not taken into account, which meant that literalize did not
work for constant expressions contiaining primitive operations or
String adds.
It produced just the right hand side literal before.
to test for propagation of constant types.
Check that calling a side effecting function returning
a constant type does not get suppressed.
DarkDimius added a commit that referenced this pull request Sep 14, 2015
Memoize: duplicate scala2 behaviour: don't create fields for final vals.
@DarkDimius DarkDimius merged commit e7ef08d into scala:master Sep 14, 2015
@allanrenucci allanrenucci deleted the final-vals2 branch December 14, 2017 16:59
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants