summaryrefslogtreecommitdiff
path: root/src
Commit message (Collapse)AuthorAgeFilesLines
* Optimation: use AnyRefMap in GenASM javaName cachesJason Zaugg2014-02-092-2/+4
| | | | These are a hotspot in the backend.
* Optimization: use AnyRef map for Namer -> Typer tree handoffJason Zaugg2014-02-095-5/+12
| | | | | | | | And uses a map per-compilation unit, rather than one per Typer. One small change required: we now need to clear this map in the the interactive compiler which reuses compilation units, rather than in the call to `Typer#reset`.
* Merge pull request #3420 from som-snytt/issue/8092-f-parsingEugene Burmako2014-02-093-174/+332
|\ | | | | 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-043-299/+316
| | | | | | | | | | | | | | | | | | | | | | | | 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-281-137/+262
| | | | | | | | | | | | | | | | | | | | | | | | | | | | 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-0812-143/+249
|\ \ | | | | | | 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-2110-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.
| * | 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.
* | | Add support for a more straightforward alternative to import selectorsDenys Shabalin2014-02-075-21/+172
| | |
* | | Use more specific return type for SyntacticFunctionDenys Shabalin2014-02-072-7/+4
| | |
* | | Better comment for SyntacticEmptyTypeTreeDenys Shabalin2014-02-071-3/+6
| | |
* | | Represent tq"" as SyntacticEmptyTypeTree rather than TypeTree()Denys Shabalin2014-02-074-2/+15
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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-062-20/+21
|\ \ \ \ | | | | | | | | | | Fix inconsistent binding in patterns with 10+ holes
| * | | | Fix inconsistent binding in patterns with 10+ holesDenys Shabalin2014-02-062-21/+22
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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 #3458 from densh/si/8173Eugene Burmako2014-02-063-40/+53
|\ \ \ \ \ | | | | | | | | | | | | SI-8173 add support for patterns like init :+ last to quasiquotes
| * | | | | SI-8173 add support for patterns like init :+ last to quasiquotesDenys Shabalin2014-02-023-40/+53
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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-069-100/+1
|\ \ \ \ \ \ | | | | | | | | | | | | | | 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.
* | | | | | | 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
| | | | | | | | |
* | | | | | | | | Merge pull request #3457 from retronym/ticket/8228Adriaan Moors2014-02-051-0/+1
|\ \ \ \ \ \ \ \ \ | |_|_|/ / / / / / |/| | | | | | | | SI-8228 Avoid infinite loop with erroneous code, overloading
| * | | | | | | | SI-8228 Avoid infinite loop with erroneous code, overloadingJason Zaugg2014-02-021-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `isApplicableBasedOnArity` couldn't get of the ferris wheel after as `followApply` kept insisting on another spin. scala> ErrorType nonPrivateMember nme.apply res0: $r.intp.global.Symbol = value apply scala> res0.info res1: $r.intp.global.Type = <error> This commit makes `followApply` consider that an `ErrorType` does not contain an `apply` member. I also considered whether to do a deep check on the type (`isErroneous`), but I can't motivate this with a test. I tend to think we *shouldn't* do that: `List[${ErrorType}]` still has an `apply` member that we should follow, right?
* | | | | | | | | Merge pull request #3432 from havocp/patch-1Adriaan Moors2014-02-051-2/+38
|\ \ \ \ \ \ \ \ \ | | | | | | | | | | | | | | | | | | | | Improve ExecutionContext implicitNotFound and docs
| * | | | | | | | | Improve ExecutionContext implicitNotFound and docsHavoc Pennington2014-01-311-2/+38
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | It is not good practice to import a specific ExecutionContext all over the place; we shouldn't recommend that. People should allow callers to specify the context in most cases and only import the context in some central location in their code. While we are at it, add some more comprehensive docs to ExecutionContext which will hopefully give people enough understanding to make decisions about it.
* | | | | | | | | | Merge pull request #3453 from Ichoran/issue/4997Adriaan Moors2014-02-051-0/+1
|\ \ \ \ \ \ \ \ \ \ | | | | | | | | | | | | | | | | | | | | | | SI-4997 deprecate StringLike.linesIterator for StringLike.lines
| * | | | | | | | | | SI-4997 deprecate StringLike.linesIterator for StringLike.linesRex Kerr2014-01-311-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Deprecated. lines is by far more consistent with the rest of the naming in the library.
* | | | | | | | | | | Merge pull request #3462 from retronym/ticket/8233Adriaan Moors2014-02-051-2/+12
|\ \ \ \ \ \ \ \ \ \ \ | | | | | | | | | | | | | | | | | | | | | | | | SI-8233 Fix regression in backend with boxed nulls
| * | | | | | | | | | | SI-8233 Fix regression in backend with boxed nullsJason Zaugg2014-02-051-2/+12
| | |_|_|_|/ / / / / / | |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Regressed in SI-7015 / 1b6661b8. We do need to "unbox" the null (ie, drop a stack from and load a null) in general. The only time we can avoid this is if the tree we are adapting is a `Constant(Literal(null))`. I've added a test for both backends. Only GenICode exhibited the problem.
* | | | | | | | | | | Merge pull request #3400 from retronym/ticket/8170Adriaan Moors2014-02-051-5/+32
|\ \ \ \ \ \ \ \ \ \ \ | | | | | | | | | | | | | | | | | | | | | | | | SI-8170 Fix regression in TypeRef#transform w. PolyTypes
| * | | | | | | | | | | SI-8170 Posing outstanding questions as TODOsJason Zaugg2014-02-051-0/+16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | We'll get to the bottom of this as soon as we get one of those Round Tuits.
| * | | | | | | | | | | SI-8170 Fix regression in TypeRef#transform w. PolyTypesJason Zaugg2014-01-221-5/+16
| | |_|_|_|_|/ / / / / | |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Regressed in SI-8046 / edc9edb7, by my hand. At the time, I noticed the problem: transform wasn't accounting for the potential Poly-Type-ness of its argument, and this would lead to under-substituted types. The commit comment of edc9edb7 shows an example. But the remedy wasn't the right one. The root problem is that a TypeMap over a PolyType can return one with cloned type parameter symbols, which means we've lose the ability to substitute the type arguments into the result. This commit detects up front whether the type-under-transform is a PolyType with the current TypeRef's type parameters, and just runs the `asSeenFrom` over its result type.
* | | | | | | | | | | Merge pull request #3465 from pavelpavlov/list-head-valAdriaan Moors2014-02-051-32/+31
|\ \ \ \ \ \ \ \ \ \ \ | | | | | | | | | | | | | | | | | | | | | | | | PR #3233 cleanup
| * | | | | | | | | | | PR #3233 cleanupPavel Pavlov2014-02-051-32/+31
| | |/ / / / / / / / / | |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | - `::.head` became a `val`; excessive accessor removed - SerializationProxy moved to `object List`
* | | | | | | | | | | SI-8030 Restore thread safety to the parserJason Zaugg2014-02-051-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | In addition to the invariant "parsing doesn’t enter new symbols", which was respected and tested in 760df9843a910d6, we also must ensure that "parsing doesn't call Symbol#info". That happend indirectly if we call `companionModule`. This commit just converts the name of `class TupleN` to a term name, rather than getting the name of its companion. No test is included. This is tested upstream in: https://jenkins.scala-ide.org:8496/jenkins/view/Memory%20Leak%20Tests/job/scalac-memory-leaks-test-2.11.0/
* | | | | | | | | | | Fix typo in compiler's error message: anoynmous => anonymousPavel Pavlov2014-02-051-1/+1
|/ / / / / / / / / /
* | | | | | | | | | Merge pull request #3439 from demobox/issue-8215Adriaan Moors2014-02-031-11/+28
|\ \ \ \ \ \ \ \ \ \ | | | | | | | | | | | | | | | | | | | | | | SI-8215: Document IllegalStateExceptions thrown by uninitialized MatchIterator from Regex (review by @heathermiller)