| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
| |
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.
|
|\ \ |
|
| | | |
|
| |/
|/| |
|
| | | |
| \ | |
| \ | |
| \ | |
| \ | |
| \ | |
| \ | |
| \ | |
| \ | |
| \ | |
| \ | |
| \ | |
| \ | |
| \ | |
| \ | |
| \ | |
| \ | |
| \ | |
|\ \ \ \ \ \ \ \ \ \ \
| | | | | | | | | | | |
| | | | | | | | | | | |
| | | | | | | | | | | | |
'scalamacros/ticket/5726', 'scalamacros/ticket/5610', 'scalamacros/ticket/5654', 'scalamacros/ticket/5521', 'scalamacros/ticket/5585', 'scalamacros/ticket/5503', 'scalamacros/ticket/4728', 'scalamacros/ticket/5534' and 'scalamacros/ticket/4560'
|
| | | | | | | | | | | | |
|
| | | | | | | | | |/ / |
|
| | | | | | | | |/ / |
|
| | | | | | | |/ / |
|
| | | | | | |/ / |
|
| | | | | |/ / |
|
| | | | |/ / |
|
| | | |/ / |
|
| | |/ / |
|
| |/ / |
|
| | | | |
| \ \ | |
| \ \ | |
| \ \ | |
| \ \ | |
| \ \ | |
|\ \ \ \| |
| | | | | |
| | | | | |
| | | | | | |
'refs/pull/488/head'; commit 'refs/pull/489/head'; commit 'refs/pull/490/head' into develop
|
| | | | | | |
|
| |/ / / / |
|
|/ / / / |
|