summaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
* SI-7479 Make test/files/run/tailcalls.scala pass on AvianSimon Ochsenreither2013-06-103-1/+58
| | | | This commit modifies the test and check file to use the new diff filter.
* SI-7479 Add avian option to partest's diff filter...Simon Ochsenreither2013-06-063-2/+6
| | | | | ... so that the different results of the test on Avian can be specified in the check file.
* Merge pull request #2605 from JamesIry/weak_hashset_uniquesGrzegorz Kossakowski2013-06-044-50/+588
|\ | | | | SI-7149 Use a WeakHashSet for type uniqueness
| * Modify perRunCaches to not leak WeakReferencesJames Iry2013-06-041-10/+3
| | | | | | | | | | | | perRunCaches was using a HashMap of WeakReferences which meant it would accumulate WeakReferences over time. This commit uses a WeakHashSet instead so that the references are cleaned up.
| * SI-7149 Use a WeakHashSet for type uniquenessJames Iry2013-06-041-2/+2
| | | | | | | | | | | | | | | | Currently type uniqueness is done via a HashSet[Type], but that means the Types live through an entire compile session, even ones that are used once. The result is a huge amount of unnecessarily retained memory. This commit uses a WeakHashSet instead so that Types and their WeakReferences are cleaned up when no longer in use.
| * SI-7150 Replace scala.reflect.internal.WeakHashSetJames Iry2013-06-042-38/+583
| | | | | | | | | | | | | | Replaces scala.reflect.internal.WeakHashSet with a version that * extends the mutable.Set trait * doesn't leak WeakReferences * is unit tested
* | Merge pull request #2623 from paulp/pr/mergeAdriaan Moors2013-06-0441-693/+799
|\ \ | | | | | | Merge 2.10.x/2.10.2 into master.
| * | Merge branch 'pr/merge-2.10.2' into masterPaul Phillips2013-06-0441-693/+799
|/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * pr/merge-2.10.2: SI-7375 ClassTag for value class aliases SI-7507 Fix lookup of private[this] member in presence of self type. SI-7532 Fix regression in Java inner classfile reader SI-7517 Fix higher kinded type inference regression SI-7516 Revert "SI-7234 Make named args play nice w. depmet types" A test case for a recent LUB progression. SI-7421 remove unneeded extra-attachement in maven deploy SI-7486 Regressions in implicit search. SI-7509 Avoid crasher as erronous args flow through NamesDefaults SI-6138 Centralize and refine detection of `getClass` calls SI-7497 Fix scala.util.Properties.isMac SI-7473 Bad for expr crashes postfix Increase build.number to 2.10.3 SI-7391 Always use ForkJoin in Scala actors on ... ... Java 6 and above (except when the porperty actors.enableForkJoin says otherwise) Reimplementing much of the DefaultPromise methods Optimizations: 1) Avoiding to call 'synchronized' in tryComplete and in tryAwait 2) Implementing blocking by using an optimized latch so no blocking ops for non-blockers 3) Reducing method size of isCompleted to be cheaper to inline 4) 'result' to use Try.get instead of patmat c.typeCheck(silent = true) now suppresses ambiguous errors Conflicts: bincompat-backward.whitelist.conf bincompat-forward.whitelist.conf src/compiler/scala/reflect/macros/contexts/Typers.scala src/compiler/scala/reflect/reify/package.scala src/compiler/scala/tools/nsc/symtab/classfile/ClassfileParser.scala src/compiler/scala/tools/nsc/typechecker/NamesDefaults.scala src/compiler/scala/tools/nsc/typechecker/Typers.scala src/compiler/scala/tools/reflect/ToolBoxFactory.scala src/library/scala/concurrent/impl/Promise.scala src/reflect/scala/reflect/internal/Types.scala
| * | Merge remote-tracking branch 'origin/2.10.2' into pr/mergePaul Phillips2013-06-0318-30/+100
| |\ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * origin/2.10.2: SI-7532 Fix regression in Java inner classfile reader SI-7517 Fix higher kinded type inference regression SI-7516 Revert "SI-7234 Make named args play nice w. depmet types" SI-7486 Regressions in implicit search. SI-7509 Avoid crasher as erronous args flow through NamesDefaults
| | * \ Merge pull request #2608 from retronym/ticket/7532v2.10.2-RC2v2.10.2James Iry2013-05-305-4/+30
| | |\ \ | | | | | | | | | | SI-7532 Fix regression in Java inner classfile reader
| | | * | SI-7532 Fix regression in Java inner classfile readerJason Zaugg2013-05-305-4/+30
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 395e90a modified the detection of top-level classes in ClassfileParser in two ways: 1. used `Name#containsChar` rather than `toString.indexOf ...` (good!) 2. decoded the name before doing this check (bad!) That code is actually only run for non-Scala classfiles, whose names don't need decoding. Attempting to do so converted `R$attr` to `R@tr`, which no longer contains a '$', and was wrongly treated as a top level class. This commit reverts the use of `decodedName`, and inlines the method to its only call site for clarity.
| | * | | Merge pull request #2607 from retronym/ticket/7517James Iry2013-05-292-4/+25
| | |\ \ \ | | | |/ / | | |/| | SI-7517 Fix higher kinded type inference regression
| | | * | SI-7517 Fix higher kinded type inference regressionJason Zaugg2013-05-302-4/+25
| | |/ / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | - Discovered in 2.10.2-RC1 - Ostensibly regressed in 7e52fb910b, which conceptually reverted part of 0cde930b so that (mutable) TypeVars don't use structural equality. - But, does *not* fail if 7e52fb910b is cherry-picked directly after 0cde930b, suggesting that it shone a light on a behaviour change in some other commit in between the two. - Indeed, the true regression came in https://github.com/scala/scala/commit/e5da30b843#L5L3176 - A targeted revert of e5da30b843 is undesirable, as we'd like SI-6846 to stay fixed What's happening here? In the enclosed test case, higher kinded type inference explores two possibilities: Composed.this.Split[A] K[[T]A[B[T]]] // `Split[A]` dealiased The difference in the flow of type inference can be seen from the diff below. Notice how now we no longer register `?K.addBound(Composed.this.Split)`, we instead only register `?K.addBound(K)` ```patch --- sandbox/old.log 2013-05-30 00:27:34.000000000 +0200 +++ sandbox/new.log 2013-05-30 00:28:28.000000000 +0200 @@ -1,55 +1,114 @@ ?K.unifyFull(Composed.this.Split[A]) ?K.unifySpecific(Composed.this.Split[A]) - ?K.addBound(Composed.this.Split) ?B.unifyFull(T) ?B.unifySpecific(T) `-> false ?B.unifyFull(Any) ?B.unifySpecific(Any) `-> false `-> false ?K.unifySpecific(L[[T]A[B[T]]]) - ?K.addBound(L) ?B.unifyFull(B[T]) ?B.unifySpecific(B[T]) ?B.addBound(B) `-> true ?B.unifyFull(B[T]) ?B.unifySpecific(B[T]) ?B.addBound(B) `-> true ?B.unifyFull(B[T]) ?B.unifySpecific(B[T]) ?B.addBound(B) `-> true ?B.unifyFull(B[T]) ?B.unifySpecific(B[T]) ?B.addBound(B) `-> true + ?K.addBound(L) `-> true ?K.unifyFull(Composed.this.Split[A]) ?K.unifySpecific(Composed.this.Split[A]) - ?K.addBound(Composed.this.Split) ?B.unifyFull(x) ?B.unifySpecific(x) `-> false `-> false ?K.unifySpecific(L[[T]A[B[T]]]) + ?B.unifyFull(B[T]) + ?B.unifySpecific(B[T]) + ?B.addBound(B) + `-> true + ?B.unifyFull(B[T]) + ?B.unifySpecific(B[T]) + ?B.addBound(B) + `-> true + ?B.unifyFull(B[T]) + ?B.unifySpecific(B[T]) + ?B.addBound(B) + `-> true + ?B.unifyFull(B[T]) + ?B.unifySpecific(B[T]) + ?B.addBound(B) + `-> true ?K.addBound(L) + `-> true +?K.unifyFull(Composed.this.Split[A]) + ?K.unifySpecific(Composed.this.Split[A]) + ?B.unifyFull(T) + ?B.unifySpecific(T) + `-> false + ?B.unifyFull(Any) + ?B.unifySpecific(Any) + `-> false + `-> false + ?K.unifySpecific(L[[T]A[B[T]]]) ?B.unifyFull(B[T]) ?B.unifySpecific(B[T]) ?B.addBound(B) `-> true ?B.unifyFull(B[T]) ?B.unifySpecific(B[T]) ?B.addBound(B) `-> true ?B.unifyFull(B[T]) ?B.unifySpecific(B[T]) ?B.addBound(B) `-> true ?B.unifyFull(B[T]) ?B.unifySpecific(B[T]) ?B.addBound(B) `-> true + ?K.addBound(L) + `-> true +?K.unifyFull(Composed.this.Split[A]) + ?K.unifySpecific(Composed.this.Split[A]) + ?B.unifyFull(x) + ?B.unifySpecific(x) + `-> false + `-> false + ?K.unifySpecific(L[[T]A[B[T]]]) + ?B.unifyFull(B[T]) + ?B.unifySpecific(B[T]) + ?B.addBound(B) + `-> true + ?B.unifyFull(B[T]) + ?B.unifySpecific(B[T]) + ?B.addBound(B) + `-> true + ?B.unifyFull(B[T]) + ?B.unifySpecific(B[T]) + ?B.addBound(B) + `-> true + ?B.unifyFull(B[T]) + ?B.unifySpecific(B[T]) + ?B.addBound(B) + `-> true + ?K.addBound(L) + `-> true +?K.unifyFull(L[A]) + ?K.unifySpecific(L[A]) + ?K.addBound(L) + `-> true +?K.unifyFull(L[A]) + ?K.unifySpecific(L[A]) + ?K.addBound(L) `-> true ```
| | * | Merge pull request #2601 from retronym/ticket/7516James Iry2013-05-295-5/+20
| | |\ \ | | | | | | | | | | SI-7516 Revert "SI-7234 Make named args play nice w. depmet types"
| | | * | SI-7516 Revert "SI-7234 Make named args play nice w. depmet types"Jason Zaugg2013-05-295-5/+20
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This reverts commit 83c9c764b528a7a1c1d39c480d22c8e3a71d5a58. The tests are shunted to 'pending'. Why revert this seemingly innocous commit? 83c9c764 generates a ValDef whose tpt TypeTree has no original; this contains a reference to the symbol for `d`. resetAttrs and the retypecheck assigns a new symbol for d and leaves a the reference to the prior symbol dangling. The real bug is the resetAttrs concept.
| | * | | Merge pull request #2590 from paulp/issue/7486Jason Zaugg2013-05-274-14/+3
| | |\ \ \ | | | |/ / | | |/| | SI-7486 Regressions in implicit search.
| | | * | SI-7486 Regressions in implicit search.Paul Phillips2013-05-234-14/+3
| | | | | | | | | | | | | | | | | | | | Revert e86832d7e8 and dd33e280e2.
| | * | | Merge pull request #2588 from retronym/ticket/7509Paul Phillips2013-05-263-3/+22
| | |\ \ \ | | | |/ / | | |/| | SI-7509 Avoid crasher as erronous args flow through NamesDefaults
| | | * | SI-7509 Avoid crasher as erronous args flow through NamesDefaultsJason Zaugg2013-05-233-3/+22
| | |/ / | | | | | | | | | | | | | | | | | | | | | | | | | | | | The fix for SI-7238 caused this regression. This commit marks taints whole Apply with an ErrorType if it has an erroneous argument, so as to stop a later crash trying to further process the tree.
| * | | Merge pull request #2609 from retronym/ticket/7507Paul Phillips2013-06-034-2/+52
| |\ \ \ | | | | | | | | | | SI-7507 Fix lookup of private[this] member in presence of self type.
| | * | | SI-7507 Fix lookup of private[this] member in presence of self type.Jason Zaugg2013-05-314-2/+52
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | In the following code: trait Cake extends Slice trait Slice { self: Cake => // must have self type that extends `Slice` private[this] val bippy = () // must be private[this] locally(bippy) } `ThisType(<Slice>)`.findMember(bippy)` excluded the private local member on the grounds that the first class in the base type sequence, `Cake`, was not contained in `Slice`. scala> val thisType = typeOf[Slice].typeSymbol.thisType thisType: $r.intp.global.Type = Slice.this.type scala> thisType.baseClasses res6: List[$r.intp.global.Symbol] = List(trait Cake, trait Slice, class Object, class Any) This commit changes `findMember` to use the symbol of the `ThisType`, rather than the first base class, as the location of the selection.
| * | | | Merge pull request #2619 from scalamacros/ticket/7375Eugene Burmako2013-06-026-2/+50
| |\ \ \ \ | | |/ / / | |/| | | SI-7375 ClassTag for value class aliases
| | * | | SI-7375 ClassTag for value class aliasesEugene Burmako2013-05-316-2/+50
| | | | | | | | | | | | | | | | | | | | reifyRuntimeClass now always dealiases its argument prior to processing.
| * | | | Merge pull request #2578 from retronym/ticket/6138Adriaan Moors2013-05-297-9/+39
| |\ \ \ \ | | | | | | | | | | | | SI-6138 Centralize and refine detection of `getClass` calls
| | * | | | SI-6138 Centralize and refine detection of `getClass` callsJason Zaugg2013-05-237-9/+39
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `getClass` is special cased in the compiler; this is described in in the comments on `Definitions.Any_getClass`. Part of this happens in `Typer#stabilize`. This was trying to determine if an Ident or Select node was a call to `getClass` by merits of the name of the tree's symbol and by checking that the its type (if it was a MethodType or PolyType) had no parameters in the primary parameter list. Overloaded user defined `getClass` methods confused this check. In the enclosed test case, the tree `definitions.this.getClass` had an `OverloadedType`, and such types always report an empty list of `params`. This commit: - changes `stabilize` to use `isGetClass`, rather than the homebrew check - changes `isGetClass` to consider a `Set[Symbol]` containing all `getClass` variants. This moves some similar code from `Erasure` to `Definitions` - keeps a fast negative path in `isGetClass` based on the symbol's name
| * | | | | Merge pull request #2570 from soc/SI-7391James Iry2013-05-281-4/+1
| |\ \ \ \ \ | | |_|/ / / | |/| | | | SI-7391 Always use ForkJoin in Scala actors on ...
| | * | | | SI-7391 Always use ForkJoin in Scala actors on ...Simon Ochsenreither2013-05-201-4/+1
| | | |/ / | | |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ... Java 6 and above (except when the porperty actors.enableForkJoin says otherwise) Like SI-7236 and SI-7237, the logic in scala.actors.scheduler.ThreadPoolConfig.useForkJoin (which resulted in a different thread pool implementation being chosen) was causing random hangs in the test concurrent-stream.scala when running on Avian.
| * | | | Merge pull request #2583 from som-snytt/issue/7473-pointless-for-crashPaul Phillips2013-05-274-5/+24
| |\ \ \ \ | | | | | | | | | | | | SI-7473 Bad for expr crashes postfix
| | * | | | SI-7473 Bad for expr crashes postfixSom Snytt2013-05-234-5/+24
| | | |/ / | | |/| | | | | | | | | | | | | | | | | | | | | | This commit makes building PostfixSelect robust against a bad pos on its operand, which can happen if a bad for expression results in an EmptyTree.
| * | | | Merge pull request #2600 from retronym/topic/lub-dealias-widenJason Zaugg2013-05-271-0/+34
| |\ \ \ \ | | | | | | | | | | | | A test case for a recent LUB progression.
| | * | | | A test case for a recent LUB progression.Jason Zaugg2013-05-271-0/+34
| |/ / / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | A test distilled from a Lift example that compiles correctly under 2.10.1, but not under 2.10.0. I pinpointed the progression to: https://github.com/scala/scala/commit/a06d31f6#L0R6611 Chalk up another win for `dealiasWiden`.
| * | | | Merge pull request #2595 from adriaanm/backport-pr-2450Paul Phillips2013-05-261-5/+1
| |\ \ \ \ | | | | | | | | | | | | SI-7421 remove unneeded extra-attachement in maven deploy
| | * | | | SI-7421 remove unneeded extra-attachement in maven deployFrançois Garillot2013-05-241-5/+1
| |/ / / /
| * | | | Merge pull request #2559 from soc/SI-7497Adriaan Moors2013-05-231-7/+9
| |\ \ \ \ | | |/ / / | |/| | | SI-7497 Fix scala.util.Properties.isMac
| | * | | SI-7497 Fix scala.util.Properties.isMacSimon Ochsenreither2013-05-231-7/+9
| |/ / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | It returned wrong values because it used the java.vendor property instead of os.name. See http://mail.openjdk.java.net/pipermail/macosx-port-dev/2012-November/005148.html for the reason why we don't follow developer.apple.com/library/mac/#technotes/tn2002/tn2110.
| * | | Merge pull request #2572 from JamesIry/2.10.3_build_numberAdriaan Moors2013-05-201-1/+1
| |\ \ \ | | | | | | | | | | Increase build.number to 2.10.3
| | * | | Increase build.number to 2.10.3James Iry2013-05-201-1/+1
| |/ / / | | | | | | | | | | | | Gets this branch ready for the next release in the 2.10.x series.
| * | | Merge pull request #2506 from scalamacros/ticket/7461Eugene Burmako2013-05-205-2/+18
| |\ \ \ | | | | | | | | | | c.typeCheck(silent = true) now suppresses ambiguous errors
| | * | | c.typeCheck(silent = true) now suppresses ambiguous errorsEugene Burmako2013-05-095-2/+18
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Otherwise use cases like the one shown in the attached test (trying to typecheck something, which leads to an ambiguous overload error) will mysteriously fail compilation.
| * | | | Merge pull request #2508 from ↵Adriaan Moors2013-05-202-43/+46
| |\ \ \ \ | | |_|/ / | |/| | | | | | | | | | | | | viktorklang/wip-removing-synchronization-from-DefaultPromise-2.10-√ Reimplementing blocking awaiting for Futures so only the blockers have t...
| | * | | Reimplementing much of the DefaultPromise methodsViktor Klang2013-05-182-43/+46
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Optimizations: 1) Avoiding to call 'synchronized' in tryComplete and in tryAwait 2) Implementing blocking by using an optimized latch so no blocking ops for non-blockers 3) Reducing method size of isCompleted to be cheaper to inline 4) 'result' to use Try.get instead of patmat
* | | | | Merge pull request #2624 from paulp/pr/revert-14534c693dPaul Phillips2013-06-0311-126/+31
|\ \ \ \ \ | | | | | | | | | | | | Revert "SI-7517 type constructors too eagerly normalized."
| * | | | | Revert "SI-7517 type constructors too eagerly normalized."Paul Phillips2013-06-0311-126/+31
|/ / / / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This reverts commit 14534c693d2eb6acafaf8244c14b5643388fbd67. It turns out this approach was breaking the working variations in the submitted test case even as it was unbreaking the unworking one, but I never managed to uncomment them. Fortunately retronym's test case was not so lackadaisical.
* | | | | Merge pull request #2599 from paulp/pr/2586-rebasePaul Phillips2013-06-031-466/+594
|\ \ \ \ \ | | | | | | | | | | | | constructors phase refactoring for readability
| * | | | | Golfed about 20 lines into the sand trap.Paul Phillips2013-05-261-37/+20
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | And it's a nice golf clinic and all, but let's remove our golf gloves and take in some film. for (stat <- defBuf.iterator ++ auxConstructorBuf.iterator) A quick count: - defBuf is a ListBuffer (1 mutant) - auxConstructorBuf is a ListBuffer (2 mutants) - two mutable iterators over mutable sequences (3, 4 mutants) - Iterator.++ joins them and is BY-NAME (4 mutants, 1 tragedy in waiting) - the joined Iterator is a new mutable structure (5 mutants, now 3 deep) - omittables is a mutable Set (6 mutants) - the 5-layer-3-deep iterator mutates omittables as it walks [The following is a public service breakdown. The letter sequence y-o-u is a local variable which should be replaced with your name, whoever "you" are, if you commit any code in these parts.] Hear my plea! YOU DON'T HAVE TO DO IT THIS WAY! It isn't simpler, faster, easier, more satisfying, shorter, more pixelated, there just isn't any advantage to it, even if you're lazy! Especially if you're lazy! Whatever combination of virtues and vices exist in your personal petri dish, this will never be a hilltop! PLEASE COME ENJOY A DRINK WITH ME AND MY FRIEND 'VAL' !! I'LL INTRODUCE YOU! I THINK YOU WILL REALLY LIKE HER! I HOPE YOU WILL SEE A LOT OF ONE ANOTHER! REMEMBER THAT NAME, 'VAL' !! SHE'LL HAVE HER EYE OUT FOR YOU!
| * | | | | Reversing reversion of ac6504b8c4.Paul Phillips2013-05-261-4/+4
| | | | | | | | | | | | | | | | | | | | | | | | Putting back the bits I moved aside to get a clean rebase.
| * | | | | skipping trips to specializeTypes when not necessary in constructorsMiguel Garcia2013-05-261-5/+13
| | | | | |
| * | | | | separation of concerns: guard non-specialized ctor-stats in constructorsMiguel Garcia2013-05-261-118/+123
| | | | | |
| * | | | | readability for intoConstructors transformerMiguel Garcia2013-05-261-11/+37
| | | | | |
| * | | | | separation of concerns: elision in constructorsMiguel Garcia2013-05-261-115/+135
| | | | | |