| Commit message (Collapse) | Author | Age | Files | Lines |
|\
| |
| | |
SI-5314 - CPS transform of return statement fails (resubmission of #987)
|
| | |
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Add `adaptTypeOfReturn` hook to `AnnotationCheckers`.
Move adaptation of types of return expressions from `addAnnotations`
to `typedReturn` via `adaptTypeOfReturn` hook.
This resolves an inconsistency where previously types could have
a plus marker without additional CPS annotations. This also adds
additional test cases.
|
| |
| |
| |
| | |
This reverts commit 8d020fab9758ced93eb18fa51c906b95ec104aed.
|
| |
| |
| |
| |
| | |
Disabled warnings that no longer apply because of tail returns.
Add several test cases.
|
| |
| |
| |
| |
| |
| |
| | |
Other fixes:
- remove CPSUtils.allCPSMethods
- add clarifying comment about adding a plus marker to a return expression
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Enable return expressions in CPS code if they are in tail position. Note that tail returns are
only removed in methods that do not call `shift` or `reset` (otherwise, an error is reported).
Addresses the issues pointed out in a previous pull request:
https://github.com/scala/scala/pull/720
- Addresses all issues mentioned here:
https://github.com/scala/scala/pull/720#issuecomment-6429705
- Move transformation methods to SelectiveANFTransform.scala:
https://github.com/scala/scala/pull/720#commitcomment-1477497
- Do not keep a list of tail returns.
Tests:
- continuations-neg/t5314-missing-result-type.scala
- continuations-neg/t5314-type-error.scala
- continuations-neg/t5314-npe.scala
- continuations-neg/t5314-return-reset.scala
- continuations-run/t5314.scala
- continuations-run/t5314-2.scala
- continuations-run/t5314-3.scala
|
|\ \
| | |
| | | |
reflection and macro cleanup
|
| | |
| | |
| | |
| | |
| | | |
I did this for ReificationError a long time ago. Must've probably forgot
to do the same for ParseError.
|
| | |
| | |
| | |
| | |
| | | |
Takes macros.Settings, throws away its mutable parts, moves classPath from Run
back to the top level - and unites all that in the Infrastructure trait.
|
| | |
| | |
| | |
| | | |
Scaladoc-driven cleanup for the win
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
scala.reflect.api.Mirror is the most basic contract for mirrors.
Currently scala.reflect.api.Universe.Mirror is simply an abstract type
type Mirror >: Null <: scala.reflect.api.Mirror[self.type], and
scala.reflect.macros.Universe doesn't override that type, so from the user
standpoint at the moment scala.reflect.api.Mirror == c.mirror, however,
in the future this might be a source of errors.
|
| | |
| | |
| | |
| | |
| | |
| | | |
currentRun goes to Enclosures and becomes enclosingRun
currentClassPath gets integrated into Run
|
| | |
| | |
| | |
| | |
| | | |
By turning them from abstract types into full-fledged traits
implemented by our internal Run and CompilationUnit.
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
It was useful to pretend that SourceFile isn't a part of the API,
when it's physical location was in scala-compiler.jar.
Afterwards Position and SourceFile have been moved to scala-reflect.jar,
and (what's more important) scala-reflect.jar gained experimental status,
meaning that we're not bound by backward compatibility in 2.10.0.
Therefore I'd say we should expose a full-fledged SourceFile in Position.source
(just as we do for Symbol.associatedFile) and later find out how to strip down
its interface to something suitable for public consumption.
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
libraryClassLoader can be derived from currentClassPath
currentMacro can be trivially derived from macroApplication
Backend-detection methods forXXX (as in forJVM or forScaladoc)
might be useful, but current design of this API is not future-proof.
I'm not able to come up with a better design on the spot, so
let's remove this functionality for the moment.
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
Back then we didn't have a notion of a macro-specific universe,
so I had to expose these methods in Context.
Now we have our very own macros.Universe, so capturing methods
have landed there.
|
| | |
| | |
| | |
| | |
| | | |
The former is a one-method trait, the latter is a two-method trait.
In a scaladoc these guys don't look like the pull their weight.
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
It was an interesting idea to give macro developers control over front ends,
but it hasn't given any visible results.
To the contrast, front ends have proven useful for toolboxes to easily control
what errors get printed where.
Therefore I'm moving front ends to scala-compiler.jar to clean up the API.
Yay for scaladoc-driven development!
|
| | |
| | |
| | |
| | | |
Continues the series of Scaladoc-driven optimizations to scala-reflect.jar.
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
This is an internal implementation class, only necessary for reification
(exposes some really internal stuff required to recreate the trees,
the stuff for which the public API is insufficient or too verbose).
Therefore we don't need it in Scaladoc.
|
| | |
| | |
| | |
| | |
| | | |
The name looks weird in the scaladoc overview panel,
so I decided to do a last-minute rename.
|
| | | |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
The only place we use something from scala.reflect.io in the public API
is Symbol.associatedFile, so I've excluded scala.reflect.io from scaladoc
and added a "warning: experimental" comment to associatedFile instead.
I'd argue that this greatly simplifies the surface of reflection API
(typing scala.reflect in the search bar now yields 3 packages instead of 4).
|
| | | |
|
|\ \ \
| |/ /
|/| | |
Finish docs for string interpolation.
|
|/ / |
|
|\ \
| | |
| | | |
SI-6412 alleviates leaks in toolboxes, attempt #2
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
Turns importer caches into fully weak hash maps, and also applies
manual cleanup to toolboxes every time they are used.
It's not enough, because reflection-mem-typecheck test is still leaking
at a rate of ~100kb per typecheck, but it's much better than it was before.
We'll fix the rest later, after 2.10.0-final.
For more information, see https://issues.scala-lang.org/browse/SI-6412 and
http://groups.google.com/group/scala-internals/browse_thread/thread/eabcf3d406dab8b2
In comparison with https://github.com/scala/scala/commit/b403c1d,
the original commit that implemented the fix, this one doesn't crash tests.
The problem with the original commit was that it called tryFixup() before
updating the cache, leading to stack overflows.
|
|\ \ \
| | | |
| | | | |
hardens DirectTest against missing -d settings
|
| |/ /
| | |
| | |
| | |
| | | |
And also explicitly specifies -d in a test where I forgot to do that.
Double checking never hurts.
|
|\ \ \
| | | |
| | | | |
Don't call `updateInfo` during typing.
|
| | | |
| | | |
| | | |
| | | | |
We resort to `setInfo`, basically removing the previous info. This "fixes" a possible race condition
in typing ModuleDefs by making the typer always 'win'. See the assertion stack trace in SI-6429.
|
|\ \ \ \
| |_|/ /
|/| | | |
Fixing -Xlint and acting on its advice for 2.10.
|
| | | |
| | | |
| | | |
| | | | |
It has become extremely noisy for reasons not yet known.
|
| | | |
| | | |
| | | |
| | | | |
These should not be public vars.
|
| | | |
| | | |
| | | |
| | | | |
It should not warn about default getters.
|
| | | |
| | | |
| | | |
| | | | |
-Xlint revealed a strange type was being inferred here.
|
| | | |
| | | |
| | | |
| | | | |
It is the cause of much unhappiness, and it is not necessary.
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
If the parameter types of a method have lower visibility than
the method itself, then the method cannot be overridden because
the parameter types cannot be expressed. This is a confusing
and frustrating situation to expose via public API. Such
methods should either have access as strong as their parameter
types, or be made final.
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
Style says never write methods like this:
def foo: Unit
If it is Unit, then it is side-effecting, and should be
def foo(): Unit
Since -Xlint warns about this, we must adhere to its dictate.
|
|/ / /
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
When you call
Some(a, b, c)
The compiler does eventually figure out that you meant
Some((a, b, c))
However the compiler finds this inordinately taxing, and
because this auto-tupling is dangerous, -Xlint warns about it.
In the interests of being able to hear -Xlint's important
points, we write Some((a, b, c)) to give it less to warn about.
|
|\ \ \
| | | |
| | | | |
SI-6277 fix for isXXX methods in reflection
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
`Symbol.getFlag`, 'Symbol.hasFlag`, `Symbol.hasAllFlags`, `Symbol.annotations`
and `Symbol.privateWithin` now trigger automatic initialization of symbols
if they are used in a runtime reflection universe and some other conditions
are met (see `Symbol.needsInitialize` for details).
As the performance testing in https://github.com/scala/scala/pull/1380 shows,
this commit introduces a ~2% performance regression of compilation speed.
Unfortunately all known solutions to the bug at hand (A, B & C - all of those)
introduce perf regressions (see the pull request linked above for details).
However we're under severe time pressure, so there's no more time to explore.
Therefore I suggest this is reasonable to accept this performance hit,
because we've just gained 6% from removing scala.reflect.base,
and even before that we were well within our performance goal for 2.10.0-final.
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
At times it's useful to know whether a lazy type can change
the flags of the underlying symbol or not.
If the completer is flag-agnostic, this means that we can safely
use flag-inspection facilities such as hasFlag and isXXX tests
without fear of looking into not yet initialized data.
|
| | | | |
|
|\ \ \ \
| | | | |
| | | | | |
SI-6410 add test cases.
|
| | | | | |
|
|\ \ \ \ \
| | | | | |
| | | | | | |
Improves SI-6409 - Add note to string flatMap about evaluation.
|
| |/ / / /
| | | | |
| | | | |
| | | | |
| | | | |
| | | | | |
Note: flatMap has to evaluate the stream until it finds
a head for the new stream. This is a limitation that will
exist for 2.10.0, but the bug will remain open.
|