summaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
* SI-6591 Reify and path-dependent typesDmitry Bushev2013-02-0821-20/+165
| | | | | | | | | | | | | | | | | | | | | | | | | 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
* Merge pull request #2035 from scalamacros/ticket/6989Eugene Burmako2013-02-087-17/+332
|\ | | | | SI-6989 privateWithin is now populated in reflect
| * introduces an exhaustive java-to-scala testEugene Burmako2013-02-053-17/+262
| | | | | | | | | | | | | | | | | | | | Originally composed to accommodate pull request feedback, this test has uncovered a handful of bugs in FromJavaClassCompleter, namely: * SI-7071 non-public ctors get lost * SI-7072 inner classes are read incorrectly I'm leaving the incorrect results of FromJavaClassCompleters in the check file, so that we get notified when something changes there.
| * SI-6989 privateWithin is now populated in reflectEugene Burmako2013-02-047-17/+87
| | | | | | | | | | Runtime reflection in JavaMirrors previously forgot to fill in privateWithin when importing Java reflection artifacts. Now this is fixed.
* | Merge pull request #2085 from scalamacros/ticket/5824Eugene Burmako2013-02-085-5/+25
|\ \ | | | | | | SI-5824 Fix crashes in reify with _*
| * | SI-5824 Fix crashes in reify with _*Evgeny Kotelnikov2013-02-075-5/+25
| | | | | | | | | | | | Reification crashes if "foo: _*" construct is used. This happens besause type tree is represented either with TypeTree, or with Ident (present case), and `toPreTyperTypedOrAnnotated' only matches of the former. The fix is to cover the latter too. A test is included.
* | | Merge pull request #2093 from adriaanm/ticket-6961James Iry2013-02-073-106/+9
|\ \ \ | | | | | | | | SI-6961 no structural sharing in list serialization
| * | | SI-6961 no structural sharing in list serializationAleksandar Prokopec2013-02-073-106/+9
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Revert list serialization back to what it was in 2.9.x and before. Partial revert of a6fcd70b60 e234978dfd, which fixed SI-5374. The ListBuffer part of the fix remains in place.
* | | | Merge pull request #2090 from adriaanm/rebase-pr-2011James Iry2013-02-0710-50/+192
|\ \ \ \ | | | | | | | | | | SI-6187 Make partial functions re-typable
| * | | | SI-6187 Make partial functions re-typableJason Zaugg2013-02-0710-50/+192
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | - `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`.
* | | | | Merge pull request #2088 from retronym/ticket/6146James Iry2013-02-077-5/+206
|\ \ \ \ \ | | | | | | | | | | | | SI-6146 More accurate prefixes for sealed subtypes.
| * | | | | SI-6146 More accurate prefixes for sealed subtypes.Jason Zaugg2013-02-077-5/+206
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When analysing exhaustivity/reachability of type tests and equality tests, the pattern matcher must construct a set of sealed subtypes based on the prefix of the static type of and the set of sealed descendent symbols of that type. Previously, it was using `memberType` for this purpose. In simple cases, this is sufficient: scala> class C { class I1; object O { class I2 } }; object D extends C defined class C defined module D scala> typeOf[D.type] memberType typeOf[C#I1].typeSymbol res0: u.Type = D.I1 But, as reported in this bug, it fails when there is an additional level of nesting: scala> typeOf[D.type] memberType typeOf[c.O.I2 forSome { val c: C }].typeSymbol res5: u.Type = C.O.I2 This commit introduces `nestedMemberType`, which uses `memberType` recursively up the prefix chain prefix chain. scala> nestedMemberType(typeOf[c.O.I2 forSome { val c: C }].typeSymbol, typeOf[D.type], typeOf[C].typeSymbol) res6: u.Type = D.O.Id
* | | | | | Merge pull request #2079 from JamesIry/2.10.x_SI-7070James Iry2013-02-0712-23/+15
|\ \ \ \ \ \ | | | | | | | | | | | | | | SI-7070 Turn restriction on companions in pkg objs into warning
| * | | | | | SI-7070 Turn restriction on companions in pkg objs into warningJames Iry2013-02-0612-23/+15
| | |_|_|/ / | |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The implementation restriction created from SI-5954 in 3ef487ecb6733bfe3c13d89780ebcfc81f9a5ea0 has two problems. 1) The problematic code works fine if compile with sbt. That means the restriction is breaking some people needlessly. 2) It's not binary compatible. To fix all that this commit changes the error into a warning and removes the setting used to get around the restriction.
* | | | | | Merge pull request #1995 from retronym/ticket/5082James Iry2013-02-073-6/+47
|\ \ \ \ \ \ | | | | | | | | | | | | | | SI-5082 Cycle avoidance between case companions
| * | | | | | SI-5082 Cycle avoidance between case companionsJason Zaugg2013-02-073-6/+47
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | We can synthesize the case companion unapply without forcing the info of the case class, by looking at the parameters in the `ClassDef` tree, rather than at `sym.caseFieldAccessors`. Access to non-public case class fields routed through the already-renamed case accessor methods. The renamings are conveyed via a back-channel (a per-run map, `renamedCaseAccessors`), rather than via the types to give us enough slack to avoid the cycle. Some special treatment of private[this] parameters is needed to avoid a misleading error message. Fortunately, we can determine this without forcing the info of the case class, by inspecting the parameter accessor trees. This change may allow us to resurrect the case class ProductN parentage, which was trialled but abandoned in the lead up to 2.10.0.
* | | | | | | Merge pull request #2089 from VladUreche/issue/7100James Iry2013-02-072-1/+7
|\ \ \ \ \ \ \ | | | | | | | | | | | | | | | | SI-7100 Fixed infinite recursion in duplicators
| * | | | | | | SI-7100 Fixed infinite recursion in duplicatorsVlad Ureche2013-02-072-1/+7
| | | | | | | |
* | | | | | | | Merge pull request #2084 from scalamacros/ticket/6113Adriaan Moors2013-02-074-3/+12
|\ \ \ \ \ \ \ \ | | | | | | | | | | | | | | | | | | SI-6113 typeOf now works for type lambdas
| * | | | | | | | SI-6113 typeOf now works for type lambdasEugene Burmako2013-02-074-3/+12
| | |_|/ / / / / | |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | It's not a problem to have an abstract type symbol in a ground type tag if that symbol is defined in the type being reified. This mechanics was already built in for existentials, now we extend it to include type params of poly types. Credit goes to @katefree
* | | | | | | | Merge pull request #2069 from retronym/ticket/6888James Iry2013-02-073-1/+25
|\ \ \ \ \ \ \ \ | |_|_|_|_|_|/ / |/| | | | | | | SI-6888 Loosen criteria for $outer search.
| * | | | | | | SI-6888 Loosen criteria for $outer search.Jason Zaugg2013-02-053-1/+25
| | |_|_|/ / / | |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | In order to cater for nested classes with names that end with '$', which lead to ambiguity when unmangling expanded names. In: class X { object $ } We end up with: orginalName(X$$$$$outer) = $$$outer This change modifies `outerSource` to consider that to be and outer accessor name. It is a piecemeal fix, and no doubt there are other nasty surprises in store for those inclined to flash their $$$ in identifier names, but the method changed is not used widely and this solves the reported problem. SI-2806 remains open to address the deeper problem.
* | | | | | | Merge pull request #1993 from mads379/SI-7026-2.10.xAdriaan Moors2013-02-075-10/+110
|\ \ \ \ \ \ \ | |_|_|_|_|/ / |/| | | | | | SI-7026 Asking for a parse tree will now never result in a typed tree
| * | | | | | SI-7026: parseTree should never return a typed oneMads Hartmann Jensen2013-02-075-10/+110
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This commit fixes ticket SI-7026. This makes it safe to use parseTree outside of the presentation compiler thread. Solved it with an implementation that just parses the source every time without trying to memorize anything. Added tests that checks that 1. You get a new parse tree every time you ask for one. 2. You always get a parse tree, never a typed tree. 3. A parse tree should never contain any symbols or types [1]. 4. If you ask for a parse tree and then ask for a typed tree it shouldn't change the parse tree you originally asked for, i.e. property 3 still holds. Additionally the parser is now only interruptible when running on the presentation compiler thread. [1] There is an exception to this though. Some of the nodes that the compiler generates will actually contain symbols. I've chosen to just ignore these special cases for now.
* | | | | | | Merge pull request #2075 from vigdorchik/tocakeAdriaan Moors2013-02-078-149/+191
|\ \ \ \ \ \ \ | |_|_|_|/ / / |/| | | | | | Add a request to presentation compiler to fetch doc comment information.
| * | | | | | Add a request to presentation compiler to fetch doc comment information.Eugene Vigdorchik2013-02-068-149/+191
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Refactor scaladoc base functionality to allow it to be mixed in with Global in the IDE.
* | | | | | | Merge pull request #2068 from scalamacros/ticket/7064Adriaan Moors2013-02-0744-470/+333
|\ \ \ \ \ \ \ | | | | | | | | | | | | | | | | [nomaster] SI-7064 Reflection: forward compat for 2.10.1
| * | | | | | | [nomaster] verifies compat with 2.10.0Eugene Burmako2013-02-052-0/+49
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Makes sure that the compiler understands the 2.10.0 format of super constructor calls after the recent revert from the typemacro-compatible format.
| * | | | | | | [nomaster] Revert "refactors handling of parent types"Eugene Burmako2013-02-0521-400/+225
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This reverts commit 40063b0009d55ed527bf1625d99a168a8faa4124. Conflicts: src/compiler/scala/tools/nsc/ast/parser/Parsers.scala src/compiler/scala/tools/nsc/typechecker/Typers.scala
| * | | | | | | [nomaster] Revert "introduces global.pendingSuperCall"Eugene Burmako2013-02-0519-100/+98
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This reverts commit 0ebf72b9498108e67c2133c6522c436af50a18e8. Conflicts: src/compiler/scala/tools/nsc/typechecker/Typers.scala src/reflect/scala/reflect/internal/Trees.scala
| * | | | | | | [nomaster] Revert "DummyTree => CannotHaveAttrs"Eugene Burmako2013-02-059-25/+18
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This reverts commit 838cbe623c142b7005446793948097f679219fe3. Conflicts: src/reflect/scala/reflect/api/Trees.scala
| * | | | | | | [nomaster] Revert "more ListOfNil => Nil"Eugene Burmako2013-02-054-4/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This reverts commit bb9adfbd76af0a0281912fcef4bcaca409a7c9a3.
| * | | | | | | [nomaster] Revert "s/SuperCallArgs/SuperArgs/"Eugene Burmako2013-02-052-9/+9
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This reverts commit 2621918870e531b7a9bcccdf14bddea9b89804b2.
| * | | | | | | [nomaster] revives BuildUtils.emptyValDefEugene Burmako2013-02-052-0/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | That method was unnecessary in the first place, because we already had emptyValDef in scala.reflect.api.Trees: https://github.com/scala/scala/blob/v2.10.0/src/reflect/scala/reflect/api/Trees.scala#L2367. That's a rudiment from the times when we were unsure what to put into scala.reflect.base and what goes into scala.reflect.api. Unfortunately, it's not just a harmless extraneous method. Reifier v2.10.0 emits `u.build.emptyValDef` when it needs to reify `emptyValDef`. Therefore we need to restore it to be forward compatible. However we don't need to rollback the changes to the reifier v2.10.1, which now simply calls `u.emptyValDef`, because, as mentioned above, that `emptyValDef` was already there in v2.10.0.
| * | | | | | | [nomaster] removes Tree.canHaveAttrsEugene Burmako2013-02-051-8/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This forward compatibility fix is very easy. Have a new method in 2.10.1? Don't expose it in the public API, and you won't have any problems.
| * | | | | | | [nomaster] doesn't touch NonemptyAttachmentsEugene Burmako2013-02-051-0/+2
| | |_|_|/ / / | |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | NonemptyAttachments in macro API used to be Attachments$NonemptyAttachments. However it's private, so noone outside scala.reflect.macros can access it, making it ineligible for the incompatibility criterion.
* | | | | | | Merge pull request #2080 from JamesIry/2.10.x_SI-5017James Iry2013-02-063-29/+0
|\ \ \ \ \ \ \ | | | | | | | | | | | | | | | | [nomaster] Revert "SI-5017 Poor performance of :+ operator on Arrays"
| * | | | | | | [nomaster] Revert "SI-5017 Poor performance of :+ operator on Arrays"James Iry2013-02-063-29/+0
|/ / / / / / / | | | | | | | | | | | | | | | | | | | | | This reverts commit 02b2da63409af6a28824cbb74d00d0ec04518c8d.
* | | | | | | Merge pull request #2064 from JamesIry/2.10.x_SI-6773James Iry2013-02-065-27/+19
|\ \ \ \ \ \ \ | | | | | | | | | | | | | | | | [nomaster] SI-6773 Makes the SI-6150 changes binary compatible with 2.10
| * | | | | | | [nomaster] SI-6773 Makes the SI-6150 changes binary compatible with 2.10James Iry2013-02-055-27/+19
| | |_|_|/ / / | |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The back ported fix of SI-6150 1f0e4880ad7ad816fd82c04f6814c5b165f86981 broke binary compatibility. This commit fixes that by removing the IndexedSeqFactory class and copy/pasting its one method around to everything that extended it then re-adds some inner classes needed by the binary compatibility checker.
* | | | | | | Merge pull request #2059 from VladUreche/issue/7060James Iry2013-02-063-31/+79
|\ \ \ \ \ \ \ | |/ / / / / / |/| | | | | | SI-7060 More conservative dead code elim marking
| * | | | | | SI-7060 More conservative dead code elim markingVlad Ureche2013-02-053-31/+79
| |/ / / / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | In dead code elimination, a DROP instruction that gets marked as useful and can be reached via several paths needs to also mark all the reaching definitions as useful, else we'll get unbalanced stacks on the two paths. A simplistic example: ``` BB1: CALL X // useful, leaves a LONG on the stack JUMP BB3 BB2: LOAD_FIELD Y // not useful JUMP BB3 BB3: DROP LONG // useful because "CALL X" is useful // but unless we mark "LOAD_FIELD Y" as useful too // we'll get unbalanced stacks when reaching BB3 ``` This patch addresses the unbalanced stack problem by adding all the reaching definitions of a useful DROP as useful instructions too.
* | | | | | Merge pull request #2051 from adriaanm/ticket-7039Adriaan Moors2013-02-044-29/+55
|\ \ \ \ \ \ | | | | | | | | | | | | | | SI-7039 unapplySeq result type independent of subpattern count
| * | | | | | SI-7039 unapplySeq result type independent of subpattern countAdriaan Moors2013-02-014-29/+55
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Fixes a bug in the implementation of the `unapplySeq` part of the spec below. An `unapply` method with result type `R` in an object `x` matches the pattern `x(p_1, ..., p_n)` if it takes exactly one argument and, either: - `n = 0` and `R =:= Boolean`, or - `n = 1` and `R <:< Option[T]`, for some type `T`. The argument pattern `p1` is typed in turn with expected type `T`. - Or, `n > 1` and `R <:< Option[Product_n[T_1, ..., T_n]]`, for some types `T_1, ..., T_n`. The argument patterns `p_1, ..., p_n` are typed with expected types `T_1, ..., T_n`. An `unapplySeq` method in an object `x` matches the pattern `x(p_1, ..., p_n)` if it takes exactly one argument and its result type is of the form `Option[S]`, where either: - `S` is a subtype of `Seq[U]` for some element type `U`, (set `m = 0`) - or `S` is a `ProductX[T_1, ..., T_m]` and `T_m <: Seq[U]` (`m <= n`). The argument patterns `p_1, ..., p_n` are typed with expected types `T_1, ..., T_m, U, ..., U`. Here, `U` is repeated `n-m` times.
* | | | | | | Merge pull request #2062 from JamesIry/2.10.x_SI-5833Adriaan Moors2013-02-041-2/+2
|\ \ \ \ \ \ \ | | | | | | | | | | | | | | | | SI-5833 Fixes tail-of-Nil problem in RefinedType#normalizeImpl
| * | | | | | | SI-5833 Fixes tail-of-Nil problem in RefinedType#normalizeImplJames Iry2013-02-041-2/+2
| | |_|_|_|/ / | |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | RefinedType#normalizeImpl was checking to see if the flattened list of parents had an empty tail then pulling the head if so. But if the list was empty then boom. This fix makes it check if the whole list has length 1 instead. Empty lists will flow through to the rest the logic which has no problems with Nil.
* | | | | | | Merge pull request #2063 from retronym/ticket/6667-2.10.x-revertAdriaan Moors2013-02-045-3/+12
|\ \ \ \ \ \ \ | | | | | | | | | | | | | | | | [nomerge] SI-6667 Demote a new ambiguity error to a lint warning.
| * | | | | | | [nomerge] SI-6667 Demote a new ambiguity error to a lint warning.Jason Zaugg2013-02-045-3/+12
| |/ / / / / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | In the interests of not breaking source compability. A few projects are relying on this bug. Should not be merged to master.
* | | | | | | Merge pull request #2050 from kzys/jira-6017-v2Adriaan Moors2013-02-044-20/+30
|\ \ \ \ \ \ \ | | | | | | | | | | | | | | | | SI-6017 Scaladoc: Fix dangling links on index.html
| * | | | | | | SI-6017 Scaladoc: Show all letters without dangling linksKato Kazuyoshi2013-02-033-9/+21
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Use <span> instead of <a href="..."> if there is no page on the letter.