summaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
* Merge pull request #3484 from retronym/ticket/8237Adriaan Moors2014-02-098-7/+110
|\ | | | | SI-8237 Avoid cyclic constraints when inferring hk type args
| * SI-8237 Avoid cyclic constraints when inferring hk type argsJason Zaugg2014-02-098-7/+110
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | An `AppliedTypeVars` spawned from `HKTypeVar#applyArgs` (necessarily) shares the same `TypeConstraints`. But, we can have multiple ATVs based on a single HKTV floating around during inference, and they can appear on both sides of type relations. An example of this is traced out in the enclosed test. This commit avoids registering upper/lower bound constraints when this is detected. In the enclosed test, we end up with an empty set of constraints for `?E`, which results in inference of Nothing, which is what we expect. I have also improved the printing of ATVs (to include the args) and sharpened the log message when `solve` leaves type variables instantiated to `NoType`, rather than some other type that doesn't conform to the bounds. Both of these changes helped me to get to the bottom of this ticket. The improved `ATV#toString` shows up in some updated checkfiles. The reported test has quite a checkered history: - in 2.10.0 it worked, but more by good luck than good planning - after the fix for SI-7226 / 221f52757aa6, it started crashing - from 3bd897ba0054f (a merge from 2.10.x just before 2.11.0-M1) we started getting a type inference failure, rather than a crash. "no type parameters for method exists [...] because cyclic instantiation". - It still crashes in `isGround` in 2.10.3.
* | Merge pull request #3488 from retronym/ticket/8245Grzegorz Kossakowski2014-02-092-1/+17
|\ \ | | | | | | SI-8245 Fix regression in interplay between lazy val, return
| * | SI-8245 Fix regression in interplay between lazy val, returnJason Zaugg2014-02-082-1/+17
| |/ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | In 4c86dbbc492 / SI-6358, synthesis of lazy val accessors trees was moved into the typer phase (in MethodSynthesis). Before that point, the symobl for the accessor *was* created early, but the tree was not. This led to crashes in intervening phases (extensionmethods) as `changeOwner` calls didn't catch the smuggled symbol. Moving the accessor generation forward, however, brought a problem: we now introduce a DefDef around the RHS of the lazy val, but we're not actually guaranteed that the body has already been typechecked. If it happened to be typechecked for the purposes of return type inference, we'll pick up the typechecked tree from `transformed`: // LazyValGetter#derivedTree val rhs1 = transformed.getOrElse(rhs0, rhs0) But if the method had an explicit return type (which must *always* be the case if it contains a `return`!), `rhs0` will be untyped. This leads to, e.g.: def foo(o: Option[Int]): Int = { lazy val i = o.getOrElse(return -1) i + 1 } def foo(o: Option[Int]): Int = { lazy <artifact> var i$lzy: Int = _; <stable> <accessor> lazy def i: Int = { i$lzy = o.getOrElse(return -1); i$lzy }; i.+(1) }; When this is typechecked, the `return` binds to the closest enclosing `DefDef`, `lazy def i`. This commit changes `Context#enclMethod` to treat `DefDef`s as transparent. `enclMethod` is only used in one other spot that enforces the implementation restriction that "module extending its companion class cannot use default constructor arguments".
* | Merge pull request #3371 from Ichoran/issue/8154Grzegorz Kossakowski2014-02-092-16/+32
|\ \ | | | | | | AnyRefMap iterates its way to ((null, null))
| * | SI-8154 AnyRefMap iterates its way to ((null, null))Rex Kerr2014-02-092-16/+32
| | | | | | | | | | | | | | | | | | Changed logic to prevent mutation between hasNext and next from delivering invalid results. Also fixed superscripts in scaladoc.
* | | Merge pull request #3485 from xeno-by/topic/reset-all-attrsJason Zaugg2014-02-0924-92/+63
|\ \ \ | |/ / |/| | kills resetAllAttrs
| * | renames resetLocalAttrs to resetAttrsEugene Burmako2014-02-0714-22/+22
| | | | | | | | | | | | | | | Now when resetAllAttrs is gone, we can use a shorter name for the one and only resetLocalAttrs.
| * | SI-8248 kills resetAllAttrsEugene Burmako2014-02-071-26/+27
| | | | | | | | | | | | | | | Noone uses it anymore, so I'm rushing to remove it, so that it no longer can trick people into using it.
| * | does away with resetAllAttrs in typedLabelDefEugene Burmako2014-02-071-1/+2
| | | | | | | | | | | | | | | Again, resetLocalAttrs works just fine there - no need to destroy references to externally defined symbols.
| * | does away with resetAllAttrs in the reifierEugene Burmako2014-02-071-10/+2
| | | | | | | | | | | | resetLocalAttrs works just fine there
| * | further limits discoverability of resetAttrsEugene Burmako2014-02-0715-38/+15
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This commit removes resetAllAttrs from the public reflection API. This method was previously deprecated, but on a second thought that doesn't do it justice. People should be aware that resetAllAttrs is just wrong, and if they have code that uses it, this code should be rewritten immediately without beating around the bush with deprecations. There's a source-compatible way of achieving that (resetLocalAttrs), so that shouldn't bring much trouble. Secondly, resetAllAttrs in compiler internals becomes deprecated. In subsequent commits I'm going to rewrite the only two locations in the compiler that uses it, and then I think we can remove it from the compiler as well.
* | | Merge pull request #3420 from som-snytt/issue/8092-f-parsingEugene Burmako2014-02-098-194/+519
|\ \ \ | | | | | | | | SI-8092 More verify for f-interpolator
| * | | SI-8092 Review cleanup, no qqSom Snytt2014-02-081-4/+20
| | | | | | | | | | | | | | | | | | | | | | | | No crazyquoting. Use global.abort on total fail. Remove unnecessary usage of varargs Apply, per review.
| * | | SI-8092 Refactor f-interpSom Snytt2014-02-045-300/+323
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | A denshish refactor makes the FormatInterpolator a nice bundle that destructures its input and flattens out the classes to give the code some elbow room. Everything shifts left. The `checkType` method is refolded and renamed `pickAcceptable`. An additional test case captures the leading edge test, that a % should follow a hole, and which is the most basic requirement.
| * | | SI-8092 More verify for f-interpolatorSom Snytt2014-01-286-157/+443
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Attempt to verify the nooks and crannies of the format string. Allows all syntax in the javadoc, including arg indexes. If the specifier after an arg has an index that doesn't refer to the arg, a warning is issued and the missing `%s` is prepended (just as for a part with a leading `%n`). Other enhancements include detecting that a `Formattable` wasn't supplied to `%#s`. Error messages attempt to be pithy but descriptive.
* | | | Merge pull request #3391 from xeno-by/ticket/8131Jason Zaugg2014-02-0813-144/+250
|\ \ \ \ | | | | | | | | | | SI-8131 fixes residual race condition in runtime reflection
| * | | | turns off the gilSynchronizedIfNotInited optimizationEugene Burmako2014-02-011-2/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | According to Jason (https://github.com/scala/scala/pull/3391#issuecomment-32904460), this one is still causing trouble, so we have to turn it off until we have time to debug it.
| * | | | SI-8131 fixes residual race condition in runtime reflectionEugene Burmako2014-01-2111-118/+224
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Apparently some completers can call setInfo while they’re not yet done, which resets the LOCKED flag, and makes anything that uses LOCKED to track completion unreliable. Unfortunately, that’s exactly the mechanism that was used by runtime reflection to elide locking for symbols that are known to be initialized. This commit fixes the problematic lock elision strategy by introducing an explicit communication channel between SynchronizedSymbol’s and their completers. Now instead of trying hard to infer whether it’s already initialized or not, every symbol gets a volatile field that can be queried to provide necessary information.
| * | | | removes non-determinism in reflection-sync-potpourriEugene Burmako2014-01-211-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Depending on the environment in which the test is run, s1 can be either “String” or “java.lang.String”. This is one of the known non-deterministic behaviors of our reflection, caused by prefix stripping only working for packages defined in the root mirror. Until we fix this, I suggest we make the test more lenient.
| * | | | FromJavaClassCompleter is now flag-agnosticEugene Burmako2014-01-201-8/+10
| | | | | | | | | | | | | | | | | | | | | | | | | A minor evolution of the notion of completion + also a small performance optimization.
| * | | | Revert "synchronizes pendingVolatiles"Eugene Burmako2014-01-205-18/+7
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This reverts commit 000c18a8fac60065747652368dadcd7850532f3f, because Symbol.isStable is independent from Type.isVolatile since fada1ef6b315326ac0329d9e78951cfc95ad0eb0.
| * | | | a note about Symbol.typeSignatureEugene Burmako2014-01-201-0/+7
| | | | | | | | | | | | | | | | | | | | | | | | | No changes to behavior, just documenting internal workings of reflection a bit more thoroughly, one step at a time.
* | | | | Merge pull request #3468 from densh/topic/syntactic-importEugene Burmako2014-02-088-42/+258
|\ \ \ \ \ | | | | | | | | | | | | Add support for a more straightforward alternative to import selectors
| * | | | | Add support for a more straightforward alternative to import selectorsDenys Shabalin2014-02-078-35/+254
| | | | | |
| * | | | | Use more specific return type for SyntacticFunctionDenys Shabalin2014-02-072-7/+4
|/ / / / /
* | | | | Merge pull request #3477 from densh/topic/syntactic-empty-type-treeEugene Burmako2014-02-077-13/+38
|\ \ \ \ \ | |_|_|_|/ |/| | | | Rename EmptyTypTree into SyntacticEmptyTypeTree
| * | | | Better comment for SyntacticEmptyTypeTreeDenys Shabalin2014-02-071-3/+6
| | | | |
| * | | | Represent tq"" as SyntacticEmptyTypeTree rather than TypeTree()Denys Shabalin2014-02-077-4/+30
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Such representation codifies the fact that type tree that doesn't have embedded syntactic equivalent must have been inferred or otherwise provided by the compiler rather than specified by the end user. Additionally it also ensures that we can still match trees without explicit types (e.g. vals without type) after typechecking. Otherwise the same quote couldn't be used in situations like: val q"val x = 42" = typecheck(q"val x = 42")
| * | | | Rename EmptyTypTree into SyntacticEmptyTypeTreeDenys Shabalin2014-02-071-11/+7
|/ / / / | | | | | | | | | | | | | | | | | | | | 1. Change the name as Eugene believes previous name was misleading 2. Remove EmptyTree case as it's not needed any longer
* | | | Merge pull request #3479 from adriaanm/eclipseAdriaan Moors2014-02-061-1/+1
|\ \ \ \ | |_|_|/ |/| | | Fix partest-extras eclipse project dependencies
| * | | Fix partest-extras eclipse project dependenciesAdriaan Moors2014-02-051-1/+1
| | | |
* | | | Merge pull request #3475 from densh/topic/holemap-orderingEugene Burmako2014-02-063-20/+26
|\ \ \ \ | | | | | | | | | | Fix inconsistent binding in patterns with 10+ holes
| * | | | Fix inconsistent binding in patterns with 10+ holesDenys Shabalin2014-02-063-21/+27
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Previously a map that was storing bindings of fresh hole variables with their contents (tree & cardinality) used to be a SortedMap which had issues with inconsistent key ordering: "$fresh$prefix$1" < "$fresh$prefix$2" ... "$fresh$prefix$8" < "$fresh$prefix$9" "$fresh$prefix$9" > "$fresh$prefix$10" This issue is solved by using a LinkedHashMap instead (keys are inserted in the proper order.)
* | | | | Merge pull request #3474 from soc/topic/osgi-feature-warningsEugene Burmako2014-02-062-3/+5
|\ \ \ \ \ | | | | | | | | | | | | Fix feature warnings in test.osgi.comp
| * | | | | Fix feature warnings in test.osgi.compSimon Ochsenreither2014-02-062-3/+5
| | |/ / / | |/| | | | | | | | | | | | | | | | | | Reduces the amount of noise from 22 lines down to the actually interesting 5 lines of information.
* | | | | Merge pull request #3458 from densh/si/8173Eugene Burmako2014-02-0610-87/+164
|\ \ \ \ \ | | | | | | | | | | | | SI-8173 add support for patterns like init :+ last to quasiquotes
| * | | | | SI-8173 add support for patterns like init :+ last to quasiquotesDenys Shabalin2014-02-0210-87/+164
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Adds support for patterns like: val q"{ ..$init; $last }" = q"{ a; b; c }" // init == List(q"a", q"b") // last == q"c" Which under the hood get compiled as `:+` patterns: SyntacticBlock(init :+ last)
* | | | | | Merge pull request #3395 from adriaanm/dist-cleanupJason Zaugg2014-02-0610-101/+2
|\ \ \ \ \ \ | | | | | | | | | | | | | | Dist cleanup
| * | | | | | Remove cruft from pom.Adriaan Moors2014-01-219-100/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | My understanding is distributionManagement is only needed to configure maven locally for publishing. Since we do that it ant, getting rid of it.
| * | | | | | Scaladoc jars should go to /api.Adriaan Moors2014-01-211-1/+1
| | | | | | |
* | | | | | | Merge pull request #3469 from adriaanm/t8239Jason Zaugg2014-02-061-2/+14
|\ \ \ \ \ \ \ | |_|_|/ / / / |/| | | | | | don't loop forever in ContextTrees.locateContextTree
| * | | | | | SI-8239 don't loop forever in ContextTrees.locateContextTreeAdriaan Moors2014-02-051-2/+14
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Made loop invariant / recursion metric explicit.
* | | | | | | Merge pull request #3473 from gkossakowski/update-eclipse-filesAdriaan Moors2014-02-051-0/+1
|\ \ \ \ \ \ \ | | | | | | | | | | | | | | | | Add repl as dependency of test-junit Eclipse project.
| * | | | | | | Add repl as dependency of test-junit Eclipse project.Grzegorz Kossakowski2014-02-061-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Since 8f20fa23dbb5b000f0889132b8c6e2acfff096b3 junit tests depend on repl. We need to reflect that dependency in our Eclipse project files.
* | | | | | | | Merge pull request #3449 from retronym/topic/opt11Grzegorz Kossakowski2014-02-056-22/+49
|\ \ \ \ \ \ \ \ | | | | | | | | | | | | | | | | | | Another grab bag of compiler optimizations
| * | | | | | | | Avoid work in GenICode#run when inactive.Jason Zaugg2014-01-311-2/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | scalaPrimitives.init() represented 1% of a small (1s) compilation run.
| * | | | | | | | Optimization in UncurryJason Zaugg2014-01-311-2/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Only perform HashMap lookup of a tree until after checking more cheaply if it refers to a symbol with by-name parameter type.
| * | | | | | | | Avoid needless Name creationJason Zaugg2014-01-313-15/+30
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | - Don't create names just to perform prefix/suffix checks - Don't create names, decode, *and* intern strings in ICode
| * | | | | | | | Optimize generic signatures utility method `dotCleanup`Jason Zaugg2014-01-311-3/+14
| | | | | | | | |