| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
| |
This reverts commit 4e10b2c833fa846c68b81e94a08d867e7de656aa.
Add 6387 test to pending and 7341 to up-to-date.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Reification scheme changed. Now Select an SelectFromTypeTree trees
reified appropriately, as Select and SelectFromTypeTree accordingly.
Packages and Predef object was excluded in order not to break the
existing reification scheme and not to break tests which rely on it.
Reified free terms can contain flag <stable> to make reified values
become stable identifiers. For example in the case of
reify_newimpl_15.scala
class C {
type T
reify { val v: List[T] = List(2) }
}
class C reified as free term C$value, and List[C.T] becomes
List[C$value().T], so C$value.apply() need to pass stability test
isExprSafeToInline at scala.reflect.internal.TreeInfo. For this purpose
special case for reified free terms was added to isExprSafeToInline
function.
test run/reify_newipl_30 disabled due to SI-7082
test t6591_4 moved to pending due to SI-7083
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
- `New(tpe)` doesn't survive a `resetAttrs` / typecheck; use
a name instead.
- Abandon the tree attachment that passed the default
case from `typer` to `patmat`; this tree eluded the
attribute reset performed in the macro. Instead, add it
to the match. Apart from making the tree re-typable, it
also exposes the true code structure to macros, which
is important if they need to perform other code
transformations.
- Install original trees on the declared types of the
parameters of the `applyOrElse` method to ensure that
references to them within the method pick up the correct
type parameter skolems upon retypechecking.
- Propagate `TypeTree#original` through `copyAttrs`,
which is called during tree duplication / `TreeCopiers`.
Without this, the original trees that we installed were
not visible anymore during `ResetAttrs`.
We are not able to reify partial functions yet -- the
particular sticking point is reification of the parentage
which is only available in the `ClassInfoType`.
|
|\
| |
| | |
[backport] SI-5378, unsoundness with type bounds in refinements.
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
As the comment says:
Not enough to look for abstract types; have to recursively check
the bounds of each abstract type for more abstract types. Almost
certainly there are other exploitable type soundness bugs which
can be seen by bounding a type parameter by an abstract type which
itself is bounded by an abstract type.
SPECIAL: BUY ONE UNSOUNDNESS, GET ONE FREE
In refinement types, only the first parameter list of methods
was being analyzed for unsound uses of abstract types. Second
parameter list and beyond had free unsoundness reign. That bug
as well is fixed here.
|
|/
|
|
|
|
|
|
|
|
|
|
| |
Reverts part of c82ecab. The parser can't assume that
a pattern `(a, b)` will match, as results of
`.isInstanceOf[Tuple2]` can't be statically known until
after the typer.
The reopens SI-1336, SI-5589 and SI-4574, in exchange for fixing
this regression SI-6968. Keeping all of those fixed will require
a better definition of irrefutability, and some acrobatics to
ensure safe passage to the ambiguous trees through typechecking.
|
|
|
|
|
|
|
|
|
| |
As experience shows, these methods can easily be a source of confusion
for the newcomers: https://issues.scala-lang.org/browse/SI-6696.
I'm only leaving the TypeTree(tp) factory, since the facility to
set underlying types for type trees is not exposed in the public API,
as it's inherently mutable.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Nested objects, classes and lazy vals are disallowed at any
nesting level in value classes; e.g. lazy vals local to a
method defined in a value class. There are still allowed in
universal traits.
This is a temporary, implementation restriction that is planned
to be addressed in future releases of Scala. Error messages has
been updated to communicate that intent.
Moved tests for SI-5582 and SI-6408 to pending folder. They have
to stay there until implementation restrictions are addressed.
Closes SI-6408 and SI-6432.
Review by @odersky, @harrah and @adriaanm.
|
|\
| |
| | |
Much better unchecked warnings.
|
| | |
|
|/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
|
|
|
| |
This reverts commit b403c1d7524ccdfc3455b5bc5d5363fdd9c82bec.
|
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
| |
This brings all the files into line with the .gitattributes
settings, which should henceforth be automatically maintained
by git.
|
|
|
|
|
|
|
|
|
|
| |
Previously tb.typeCheck used default typer, which builds upon NoContext.
Changing the context to analyzer.rootContext(NoCompilationUnit, EmptyTree)
fixed the missing imports problem.
Unfortunately this doesn't help in cases like "math.sqrt(4.0)" because of
https://issues.scala-lang.org/browse/SI-6393. But anyways I'm adding
this test case to pending.
|
|
|
|
|
|
| |
1) parseExpr => parse
2) runExpr => eval
3) Introduces compile(Tree): () => Any, since it has frequent uses
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The new name for AbsTypeTag was a matter of a lengthy discussion:
http://groups.google.com/group/scala-internals/browse_thread/thread/fb2007e61b505c4d
I couldn't decide until having fixed SI-6323 today, which is about
trying to reflect against a local class using typeOf.
The problem with local classes is that they aren't pickled, so their metadata
isn't preserved between Scala compilation runs. Sure, we can restore some of
that metadata with Java reflection, but you get the idea.
Before today typeOf of a local class created a free type, a synthetic symbol,
with a bunch of synthetic children that remember the metadata, effectively
creating a mini symbol table. That might be useful at time, but the problem is
that this free type cannot be reflected, because the global symbol table of
Scala reflection doesn't know about its mini symbol table.
And then it struck me. It's not the presence of abs types (type parameters and
abs type members) that differentiates arbitrary type tags from good type tags.
It's the presence of types that don't map well on the runtime world - ones that
can't be used to instantiate values, ones that can't be reflected.
So we just need a name for these types. Phantom types are compile-time only
concept, whereas our types can have partial correspondence with the runtime.
"Weak types" sound more or less okish, so let's try them out.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Error reporting is moved to ContextErrors to disentangle stuff in Macros.scala.
With logics and error reporting intertwined it was an awful mess.
Exceptions are used for the same reason. Instead of threading failures through
the code polluting it with options/ifs, I outline the success path.
It worked much better for typedMacroBody, but I'm also happy with the resulting
code of macroExpand. To me a major factor towards applicability of exceptions
was that they are short-lived and that there might be max one error per domain,
after which we unconditionally bail.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The original idea was to support both both TypeTags and ConcreteTypeTags as
context bounds on macro implementations.
Back then TypeTags were the implied default flavor of type tags. Basically
because "TypeTag" is shorter than "ConcreteTypeTag" everyone jumped onto
them and used them everywhere.
That led to problems, because at that time TypeTags could reify unresolved type
parameters ("unresolved" = not having TypeTag annotations for them). This
led to a series of creepy errors, when one forgets to add a context bound
in the middle of a chain of methods that all pass a type tag around, and then
suddenly all the tags turn into pumpkins (because that unlucky method just
reifies TypeRef(NoPrefix, <type parameter symbol>, Nil and passes it down
the chain).
Hence we decided to rename ConcreteTypeTag => TypeTag & TypeTag => AbsTypeTag,
which makes a lot of sense from a reflection point of view.
Unfortunately this broke macros (in a sense), because now everyone writes
TypeTag context bounds on macro implementations, which breaks in trivial
situations like: "def foo[T](x: T) = identity_macro(x)" (the type of x
is not concrete, so macro expansion will emit an error when trying to
materialize the corresponding TypeTag).
Now we restore the broken balance by banning TypeTag from macro impls.
This forces anyone to use AbsTypeTags, and if someone wants to check the input
for presence of abstract types, it's possible to do that manually.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Other breakage had accumulated among Settings. I determined
that once upon a time, "MultiStringSetting" accepted arguments
like this:
scala -foo bip bop bar
Somewhere this was changed to force a : argument, like
scala -foo:bip,bop,bar
This incurs breakage. The repl has always advertised its -i
option without a colon and it has always been a MultiStringSetting.
Forcing everything into the : seemed like the wrong thing,
especially because it will stomp on any whitespace containing
arguments, whereas in the original form
scala -foo bip "bop bar" baz
will yield its arguments as given.
So lacking any good ideas and knowing something probably depends
on each way already, I made it work both ways.
|
|
|
|
| |
Removes the stubs left out to appease the old starr, fixes macro tests.
|
|
|
|
|
|
| |
Added all the known cases of failing self-types. Added tests for symbol
access (SI-4601) as well which should now be fixed for all of the same cases
as well.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Currently there are discrepancies between the behavior of
c.reify and c.universe.reify.
First step in fixing these problems is removing the duplication in the API.
That's why I'm cutting away the Context.reify shortcut.
Context.reify is a magic macro, hardwired in the fast track mechanism, so
removing it requires redeploying the starr (because an old starr will
crash if launched on sources that don't contain Context.reify).
To cleanly redeploy a starr I've left a Context.reify stub in sources,
but hidden it behind a `protected` modifier. When starr is redeployed
(in a subsequent commit) the stub will be removed.
I've also updated the tests to use c.universe.reify instead of c.reify.
This will break some of them, because c.universe.reify uses a standard
compiler mirror, which unlike a macro mirror doesn't like packageless classes.
That's an annoyance, but I think having clean separation of commits
is more important that being 100% consistent.
|
|\
| |
| | |
SI-5695 removes Context.enclosingApplication
|
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Apparently it's impossible to find out the enclosing Apply node
if you're an argument being typechecked (because the arguments
are typechecked separately from the enclosing Apply).
This functionality is by far not a core feature of macros,
so I'm removing it.
|
|/
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
I have this sneaky suspicion that part of these spurious failures
are caused by the recent partest optimizations.
@axel22 already checked that compiler instances are not shared between test runs.
However, except for the benchmark test, they all have a distinct
race condition in symbol loading/type checking feel to them.
Since, in the end, the tests and/or their corresponding fixes are as likely
a culprit as the test framework, moving them out of the way until their owners
can get them back in line and they stop throwing primate wenches into our build.
We should bring them back as soon as possible, though.
|
|
|
|
|
| |
this uncovers a bug in toolboxes: https://issues.scala-lang.org/browse/SI-6007
however that bug is not critical, so it will be dealt with later
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
1) type ClassManifest[T] = ClassTag[T] (solves a problem
with toArray[T: ClassManifest] defined on most of the collections;
if these types weren't aliases, then we won't be able to change
the signature of that method to toArray[T: ClassTag], because
that would break source compatibility for those who override
toArray in their custom collections)
2) Compiler-generated manifests no longer trigger deprecation warnings
(this is implemented by using ClassManifestFactory instead of ClassManifest
and ManifestFactory instead of Manifest)
3) Deprecation messages got improved to reflect the changes
that were introduced in 2.10.0-M4.
|
| |
|
|
|
|
|
|
|
|
|
| |
If the target method is defined in Java, treat the super reference
as an error, otherwise allow it in the knowledge that Scala loosens
the access restrictions on its generated classes.
Moves the test for that bug out of pending-ville. It's sufficient
to place Test in the empty package to exercise the right code paths.
|
|
|
|
|
| |
This protects everyone from the confusion caused by stuff like this:
https://issues.scala-lang.org/browse/SI-5884
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Move `MurmurHash3` to `util.hashing`.
Make the `class` private and retain a public companion
`object`, and put the `MurmurHash3.Hashing` implementations
for various types in the companion.
Add a method which composes `ByteswapHashing` with some other hashing.
Rename `hashOf` to `hash`.
Fix chi-square test in a test-case.
Review by @jsuereth.
Moved a failing test that seems to use some other library version to pending.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Are these -msil checkfiles used in some secret fashion? The level of
activity suggest otherwise. Since scala-nightly-msil has been disabled
for over a year, it's an easy rm unless someone speaks up.
% tools/rm-orphan-checkfiles
Scanning for orphan check files...
rm 'test/disabled/run/code.check'
rm 'test/files/jvm/t1652.check'
rm 'test/files/neg/macro-argtype-mismatch.check'
rm 'test/files/neg/macro-noncompilertree.check'
rm 'test/files/neg/macro-nontree.check'
rm 'test/files/run/Course-2002-01-msil.check'
rm 'test/files/run/Course-2002-02-msil.check'
rm 'test/files/run/Course-2002-03-msil.check'
rm 'test/files/run/Course-2002-04-msil.check'
rm 'test/files/run/Course-2002-08-msil.check'
rm 'test/files/run/Course-2002-09-msil.check'
rm 'test/files/run/Course-2002-10-msil.check'
rm 'test/files/run/absoverride-msil.check'
rm 'test/files/run/bitsets-msil.check'
rm 'test/files/run/boolord-msil.check'
rm 'test/files/run/bugs-msil.check'
rm 'test/files/run/impconvtimes-msil.check'
rm 'test/files/run/infix-msil.check'
rm 'test/files/run/iq-msil.check'
rm 'test/files/run/macro-invalidret-doesnt-conform-to-impl-rettype.check'
rm 'test/files/run/macro-rettype-mismatch.check'
rm 'test/files/run/misc-msil.check'
rm 'test/files/run/promotion-msil.check'
rm 'test/files/run/richs-msil.check'
rm 'test/files/run/runtime-msil.check'
rm 'test/files/run/tuples-msil.check'
rm 'test/pending/jvm/t1464.check'
rm 'test/pending/run/subarray.check'
rm 'test/pending/run/t0446.check'
rm 'test/pending/run/t5629.check'
Scanning for orphan flags files...
rm 'test/files/neg/macro-argtype-mismatch.flags'
rm 'test/files/neg/macro-noncompilertree.flags'
rm 'test/files/neg/macro-nontree.flags'
rm 'test/files/pos/anyval-children.flags'
rm 'test/files/pos/t3097.flags'
rm 'test/files/run/macro-invalidret-doesnt-conform-to-impl-rettype.flags'
rm 'test/files/run/macro-rettype-mismatch.flags'
|
|
|
|
|
|
|
|
| |
Move now-passing SI-963 test into neg.
Test for partial specialization.
Pending test for SI-5008.
Pending test for SI-4649.
Abstract array type test.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
- TypeTestTreeMaker subsumes the old TypeTestTM and TypeAndEqualityTM
its type- and equality-testing logic is configurable so that it can:
- generate trees (main purpose)
- check whether this tree maker is a pure type test
- generate the proposition that models this tree maker
(for exhaustivity and other analyses)
- [CSE] subst binders of dropped tm's to stored ones
somehow the refactoring broke the replacement of the binder of dropped
treemakers by the binder of the reused treemaker
when replacing
TM1(x1 => ...) >> TM2(x2 => ...) >> TM3(x3 => ...) >> ...
TM1'(x1' => ...) >> TM2'(x2' => ...) >> TM3(x3' => ...) >> ...
by
Memo1(x1 => ...) >> TM2(x2 => ...) >> Memo2(x3 => ...) >> ...
Reuse(Memo2)...
you need to replace x1' and x2' by x1
since TM2 tested a shared condition but was not memo-ised,
that implies it simply passed x1 through to x3 unmodified,
and x2' can simply use the stored x1
- type of first uniqued binder sets type of tree
when approximating a tree of treemakers as a DAG,
where sharing indicates the same value is tested,
use the type of the binder that was first used to
create a unique tree as the type of that tree,
and thus all trees used for the same binder in the future
- track substitution of alternatives when approximating
- error on unswitchable @switch annotated matches
if we can't turn a match (with more than two cases) into a switch,
but the user insists, emit an error
misc notes:
- when all you need is nextBinder, FunTreeMaker is your guy
- must pass flag to TypeTestTM for extractorarg test
case TypeTestTreeMaker(prevBinder, testedBinder, expectedTp, nextBinderTp)
(prevBinder eq testedBinder) does not imply it's a pure type test for an extractor call
note that the expected type for an extractor argument is not a type pattern,
thus we only do a classic type test -- the idea was to detect that case by noticing we're
being called with the same previous and tested binder, but that case also arises
for Typed patterns
|
|
|
|
|
|
| |
The super accessor for the Java varargs method impedes Uncurry's
efforts to convert repeated arguments to an Array. I'm not sure how
to fix that.
|
|\ \
| | |
| | |
| | | |
'refs/pull/549/head'; commit 'refs/pull/550/head'; commit 'refs/pull/551/head' into develop
|
| |/ |
|
| | |
|
|\ \ |
|
| | | |
|
| | |
| | |
| | |
| | |
| | |
| | | |
Closes SI-4482, SI-4651, SI-3702.
Pending tests for SI-1832, SI-3439, SI-5091, SI-5231, SI-5265.
|
|/ /
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
If you can't get your hands on something which crashes
scalac - I know, I know - you can try this ready-made crasher.
% cat test/pending/pos/t4717.scala
trait Bounds[@specialized A] {
// okay without `>: A`
def x[B >: A]: Unit = new Bounds[B] {
lazy val it = ??? // def or val okay
it
}
}
% scalac -d /tmp test/pending/pos/t4717.scala
error:
while compiling: test/pending/pos/t4717.scala
during phase: specialize
library version: version 2.10.0-20120510-134429-ce1d68ed19
compiler version: version 2.10.0-20120510-152646-ba4dfd1e63
reconstructed args: -d /tmp
last tree to typer: Select(This(trait Bounds$mcZ$sp), x$mcZ$sp)
symbol: method x$mcZ$sp in trait Bounds$mcZ$sp (flags: override <method> <specialized>)
symbol definition: override def x$mcZ$sp[B >: Boolean](): Unit
tpe: [B >: Boolean]()Unit
symbol owners: method x$mcZ$sp -> trait Bounds$mcZ$sp -> package <empty>
context owners: value it -> anonymous class $anon -> method x$mcZ$sp -> trait Bounds$mcZ$sp -> package <empty>
== Enclosing template or block ==
Block(
Assign(
$anon.this."it "
Apply( // def ???(): Nothing in object Predef, tree.tpe=Nothing
scala.this."Predef"."$qmark$qmark$qmark" // def ???(): Nothing in object Predef, tree.tpe=()Nothing
Nil
)
)
$anon.this."it " // lazy private[this] var it: Nothing, tree.tpe=Nothing
)
== Expanded type of tree ==
PolyType(
typeParams = List(TypeParam(B >: Boolean))
resultType = NullaryMethodType(
resultType = TypeRef(TypeSymbol(final class Unit extends AnyVal))
)
)
// And then the usual stack trace
|
|/
|
|
| |
Closes SI-5210.
|
|\ \ |
|
| | | |
|
| |/
|/| |
|