summaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
* SI-8213 AnyRefMap.getOrElseUpdate is faultyRex Kerr2014-01-303-4/+38
| | | | | | Altered getOrElseUpdate to be robust to the map changing out from under it as a result of calling the default value method. Side-effects FTW! Made a comparable change in LongMap also, as it was also affected. And added a test to SetMapConsistencyTest.
* Merge pull request #3429 from som-snytt/issue/8205Jason Zaugg2014-01-292-2/+30
|\ | | | | SI-8205 Don't include CR in line
| * SI-8205 Don't include CR in lineSom Snytt2014-01-292-2/+30
|/ | | | | | | | | | | More penance. Extend the unit test and don't include CR in the line text. This is obvious, which shows how dangerous it is to refactor without unit tests. My very favorite bugs are off-by-one and EOL handling, followed closely by off-by-Int.MaxValue.
* Merge pull request #3427 from retronym/ticket/8205Jason Zaugg2014-01-292-3/+36
|\ | | | | Avoid long, slow march to AIIOBE in SourceFile#lineContent
| * SI-8205 Avoid long, slow march to AIIOBE in SourceFile#lineContentJason Zaugg2014-01-292-3/+36
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Fixing a regression from SI-8015. The failure mode is kind of amusing: a while loop in `lineToString` would count all the way to `Int.MaxValue`, and integer overflow would foil a bounds check when looking for the 'LF' in 'CR'-'LF'. Given that we're not a style checker to enforce that source files end in a new-line, this commit accounts for EOF, and fixed the overflow problem too. A JUnit test exercises the bug and a few other variations of `lineContent`. While i was in the neighbourhood, I opted for a more efficient means to slice out that line.
* | Merge pull request #3426 from retronym/ticket/8199Grzegorz Kossakowski2014-01-292-4/+112
|\ \ | | | | | | SI-8199 Account for module class suffix in -Xmax-classfile-name
| * | SI-8199 Account for module class suffix in -Xmax-classfile-nameJason Zaugg2014-01-292-4/+112
| |/ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The class file name of an inner class is based on the flattened name of its owner chain. But, if this is going to be unreasonably long, it is shortened with the help of a MD5 hash. However, after this shortening takes place, we sneakily add one more character (the infamous '$') to the name when it is used for the module class. It is thus possible to exceed the limit by one. The enclosed test failed on Mac with "filename too long" because of this. I have also tested for trait implementatation classes, but these seem to be suffixed with "$class" before the name compactification runs, so they weren't actually a problem. This change is binary incompatible as separately compiled defintions and usages of named, inner classes need to agree on this setting. Most typically, however, these long names crop up for inner anonymous classes / functions, which are not prone to the binary incompatiblity, assuming that their creation hasn't be inlined to a separately compiled client.
* | Merge pull request #3374 from densh/si/6844-8076Jason Zaugg2014-01-2913-87/+194
|\ \ | | | | | | SI-6844 SI-8076 improve handling of function parameters in quasiquotes
| * | SI-8076 improve support for implicit argument listDenys Shabalin2014-01-166-4/+72
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This adds support for construction and deconstruction of implicit argument list which was originally suggested by @cvogt. 1. Splicing vale into implicit argument list automatically adds implicit flag to them: val x = q"val x: Int" q"def foo(implicit $x)" // <=> q"def foo(implicit x: Int)" 2. One might extract implicit argument list separately from other argument lists: val q”def foo(...$argss)(implicit ..$impl)" = q"def foo(implicit x: Int) // argss is Nil, impl contains valdef for x But this doesn't require you to always extract it separatly: val q”def foo(...$argss)" = q"def foo(implicit x: Int) // argss contains valdef for x
| * | SI-6844 restrict splicing in parameter positionDenys Shabalin2014-01-1611-84/+123
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Previously were a bit too permissive on how splicing in function parameter position worked. This made confusing things like possible: val x = TermName(“x”) q”def foo($x)” Now you can either splice trees in that position (ValDefs) or you have to provide type if you splice a name.
* | | Merge pull request #3402 from densh/si/7275Eugene Burmako2014-01-2913-64/+206
|\ \ \ | |_|/ |/| | SI-7275 allow flattening of blocks with ..$
| * | Addresses feedback from JasonDenys Shabalin2014-01-277-47/+105
| | | | | | | | | | | | | | | | | | | | | | | | | | | 1. Adds tests for new synthetic unit stripping. 2. Marks implementation-specific parts of Holes as private. 3. Trims description of iterated method a bit. 4. Provides a bit more clear wrapper for q interpolator. 5. Refactors SyntacticBlock, adds documentation. 6. Makes q"{ ..$Nil }" return q"" to be consist with extractor.
| * | Reify all blocks as syntactic blocksDenys Shabalin2014-01-241-1/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Previous version of the pattern wasn't precise enough due to the fact that synthetic units are now erased by syntactic block and this could cause incorrect reification for cases like: val x = { val y = 1 } Here syntactic block would extract one element but we still need to reify it through syntactic block endpoint. So we can't filter based on the number of elements extracted but rather filter on type of a tree.
| * | Address pull request feedbackDenys Shabalin2014-01-232-2/+2
| | |
| * | SI-7275 allow flattening of blocks with ..$Denys Shabalin2014-01-236-17/+56
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This commit extends current splicing rules to allow flattening of trees into other trees. Without such support it is impossible to correctly create vals with patterns and use it in other location as they could expand into multiple-statement blocks: scala> q"val (a, b) = (1, 2)" res0: reflect.runtime.universe.Tree = { <synthetic> <artifact> private[this] val x$1 = scala.Tuple2(1, 2): @scala.unchecked match { case scala.Tuple2((a @ _), (b @ _)) => scala.Tuple2(a, b) }; val a = x$1._1; val b = x$1._2; () } scala> q"..$res0; println(a + b)" res1: reflect.runtime.universe.Tree = { <synthetic> <artifact> private[this] val x$1 = scala.Tuple2(1, 2): @scala.unchecked match { case scala.Tuple2((a @ _), (b @ _)) => scala.Tuple2(a, b) }; val a = x$1._1; val b = x$1._2; println(a.$plus(b)) }
| * | Refactor reification of high-cardinality holesDenys Shabalin2014-01-232-16/+52
| | | | | | | | | | | | | | | New approach makes iterated function much more clear through aggressive code reuse, recursion and large descriptive comment on top of it.
| * | Tag synthetic unit with attachmentDenys Shabalin2014-01-235-3/+10
| | | | | | | | | | | | | | | | | | | | | | | | This makes it easy to differentiate unit inserted by a compiler vs unit written by the user. Useful for quasiquotes and pretty printing. Additionally SyntacticBlock extractor is changed to treat EmptyTree as zero-element block.
* | | Merge pull request #3418 from som-snytt/issue/8182-bJason Zaugg2014-01-294-3/+49
|\ \ \ | | | | | | | | SI-8182 Avert crash due to type args in pattern
| * | | SI-8182 Avert crash due to type args in patternSom Snytt2014-01-274-3/+49
| | | | | | | | | | | | | | | | | | | | Error out type args on binary op after emitting error. Let the parse limp into the whirring blades.
* | | | Merge pull request #3413 from paulp/pr/futureAdriaan Moors2014-01-261-4/+4
|\ \ \ \ | |/ / / |/| | | Fix misuse of underscores.
| * | | Fix misuse of underscores.Paul Phillips2014-01-251-4/+4
| | | | | | | | | | | | | | | | | | | | | | | | It's a language bug, but M[_] <: Foo[_] does not mean what anyone who writes it believes that it means. You have to give the type parameter a name, like M[X] <: Foo[X].
* | | | Merge pull request #3414 from xeno-by/topic/reifyEugene Burmako2014-01-261-4/+4
|\ \ \ \ | |/ / / |/| | | corrects an error in reify’s documentation
| * | | corrects an error in reify’s documentationEugene Burmako2014-01-261-4/+4
| | | |
* | | | Merge pull request #3411 from som-snytt/issue/7919-si-nlJason Zaugg2014-01-252-2/+11
|\ \ \ \ | | | | | | | | | | Newline after empty string interp
| * | | | SI-7919 Newline after empty string interpSom Snytt2014-01-242-2/+11
| | | | | | | | | | | | | | | | | | | | | | | | | Consume the newline non-raw for safe handling after single-line interpolation.
* | | | | Merge pull request #3412 from retronym/ticket/2066-2.10-compatJason Zaugg2014-01-255-2/+77
|\ \ \ \ \ | | | | | | | | | | | | -Xsource:2.10: lenient treatment of variance in <:<, =:=
| * | | | | SI-2066 -Xsource:2.10: lenient treatment of variance in <:<, =:=Jason Zaugg2014-01-245-2/+77
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The soundness hole was exploited in Scalaz. They have fixed their codebase correctly for Scalac 7.1.x, but have less freedom to break source compatiblity in 7.0.x. After this commit, they could choose to compile that branch with -Xsource:2.10
* | | | | | Merge pull request #3410 from densh/si/8171Eugene Burmako2014-01-244-6/+17
|\ \ \ \ \ \ | |/ / / / / |/| | | | | SI-8171 make tq"" an alias for empty type tree
| * | | | | SI-8171 make tq"" an alias for empty type treeDenys Shabalin2014-01-242-2/+13
| | | | | |
| * | | | | Use more precise return types for objectsDenys Shabalin2014-01-242-4/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This ensures that q"object O" is of type ModuleDef rather than Tree and similarly q"package object O" is of type PackageDef.
* | | | | | Merge pull request #3390 from adriaanm/release-2.11.0-M8Adriaan Moors2014-01-241-5/+6
|\ \ \ \ \ \ | | | | | | | | | | | | | | Versions of modules part of Scala 2.11.0-M8.
| * | | | | | Versions of modules part of Scala 2.11.0-M8.Adriaan Moors2014-01-231-5/+6
| | | | | | |
* | | | | | | Merge pull request #3388 from rklaehn/issue/7445Adriaan Moors2014-01-244-24/+25
|\ \ \ \ \ \ \ | |_|_|/ / / / |/| | | | | | ListMap.tail is returning wrong result
| * | | | | | SI-7445 ListMap.tail is returning wrong resultRuediger Klaehn2014-01-204-24/+25
| |/ / / / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Reverted the commit that introduced the bug, and modified HashMap to no longer assume that tail is O(1). Review by @Ichoran, @soc
* | | | | | Merge pull request #3404 from gkossakowski/java8-supportGrzegorz Kossakowski2014-01-244-5/+15
|\ \ \ \ \ \ | |_|/ / / / |/| | | | | Preliminary support for building and testing with Java 8
| * | | | | Make abstract-report2 test less dependent on std library.Grzegorz Kossakowski2014-01-212-5/+9
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Replace the use of `Ordering` by custom, dummy trait Xyz defined in test's source. By not inheriting from Ordering in abstract-report2 we make the test less dependent on both Scala and Java library. The reason we are less dependent on Java is because Ordering extends Java's comparator. This change is motivated by the fact that Java 8 introduced default method `reversed` to Comparator interface and we get a failure due to conflicting inheritance: -abstract-report2.scala:9: error: trait Bippy inherits conflicting members: - method reversed in trait TraversableOnce of type => List[(T2, String)] and - method reversed in trait Comparator of type ()java.util.Comparator[T3] -(Note: this can be resolved by declaring an override in trait Bippy.) -trait Bippy[T1, T2, T3] extends Collection[T1] with TraversableOnce[(T2, String)] with Ordering[T3] - ^
| * | | | | Work-around for partest failure due to JDK bug.Grzegorz Kossakowski2014-01-211-0/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | JDK7 and JDK8 have a bug that causes JVM to print some warning about applets that is unrelated to whatever we are testing in Scala. Let's work it around using test/files/filters mechanism that allows us to filter out output lines based on regexp.
| * | | | | Add support for Java 8 in our build.Grzegorz Kossakowski2014-01-211-0/+4
| |/ / / / | | | | | | | | | | | | | | | | | | | | We explicitly check for supported Java versions in our build. Add Java 8 to the list of supported versions.
* | | | | Merge pull request #3394 from cunei/wip-cross-suffixAdriaan Moors2014-01-232-10/+40
|\ \ \ \ \ | |_|/ / / |/| | | | Add cross suffix customizability for modules
| * | | | fix to partest.crossAntonio Cunei2014-01-221-2/+2
| | | | |
| * | | | Add cross suffix customizability for modulesAntonio Cunei2014-01-222-10/+40
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | For each module whose version can be specified using the property "xxx.version.number", it is now possible to specify its cross version suffix by using an optional property "xxx.cross.suffix". If such a property is not defined, then continue to use the string "_${scala.binary.version}", as before.
* | | | | Merge pull request #3401 from xeno-by/topic/freshEugene Burmako2014-01-226-21/+61
|\ \ \ \ \ | |_|_|/ / |/| | | | SI-6879 improves Context.freshName
| * | | | addresses pull request feedbackEugene Burmako2014-01-222-4/+4
| | | | |
| * | | | SI-6879 improves Context.freshNameEugene Burmako2014-01-226-21/+61
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Instead of per-compilation unit unique counters, the freshName API now uses a per-Global counter. Fresh names now also contain dollars to exclude clashes with supported user-defined names (the ones without dollar signs). This doesn’t fix the bug, because per-Global counters get created anew every time a new Global is instantiated, and that provides some potential for name clashes even for def macros, but at least it completely excludes clashes in typical situations.
* | | | | Merge pull request #3399 from xeno-by/topic/evalEugene Burmako2014-01-221-2/+7
|\ \ \ \ \ | | | | | | | | | | | | an optimization for c.eval
| * | | | | an optimization for c.evalEugene Burmako2014-01-221-2/+7
| |/ / / / | | | | | | | | | | | | | | | | | | | | | | | | | People are very frequently using c.eval in order to obtain underlying values of literals. Spinning up a new compiler for that modest purpose is a gross waste of fossil fuels.
* | | | | Merge pull request #3398 from densh/topic/var-arity-class-seqEugene Burmako2014-01-223-6/+33
|\ \ \ \ \ | |_|/ / / |/| | | | Expose seq field for variable arity definitions
| * | | | Expose seq field for variable arity definitionsDenys Shabalin2014-01-223-6/+33
|/ / / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | In 2.11 we've changed TupleClass, ProductClass and FunctionClass endpoints to be exposed as (Int => Symbol) functions that never throw exceptions but rather return NoSymbol instead of previous error-prone indexed access on array that could explode. While simplifying one use case (indexed access) it complicated ability to check if symbol at hand is in fact a tuple, product or function: (1 to 22).map(TupleClass).toList.contains(symbol) To cover this extra use case we add a seq method to the variable arity class definitions that exposes a corresponding sequence of class symbols: TupleClass.seq.contains(symbol)
* | | | Merge pull request #3382 from soc/topic/std-inJason Zaugg2014-01-214-33/+33
|\ \ \ \ | |/ / / |/| | | Improve naming of ReadStdin
| * | | Improve naming of ReadStdinSimon Ochsenreither2014-01-184-33/+33
| | | | | | | | | | | | | | | | | | | | We don't need to say everything twice, methods are already prefixed with “read”.