aboutsummaryrefslogtreecommitdiff
path: root/src
Commit message (Collapse)AuthorAgeFilesLines
* Pickling modularization reorgMartin Odersky2015-05-0227-47/+47
| | | | | | | The pickling package got rather large and confusing with three separate tasks that each had their own conventions: read JVM classfiles, read Scala2 pickle info, read Tasty. The classes for each task are now in separate packages.
* Merge pull request #507 from dotty-staging/add/from-tastyDmitry Petrashko2015-05-0213-87/+228
|\ | | | | Compile from Tasty
| * Force TASTY trees read by unpickler in FromTastyMartin Odersky2015-04-301-0/+6
| | | | | | | | | | We want to ensure that the whole tree is read at phase frontend. To achieve this, we run an empty traverser over the tree.
| * Move addrOfTree, addOfSym from CompilationUnit to Pickler.Martin Odersky2015-04-283-16/+18
| | | | | | | | | | These only exist if there was a pickler, and they are not unique per CompilationUnit.
| * Add usage documentation to FromTastyMartin Odersky2015-04-281-0/+11
| |
| * Handle missing delta positions when unpicklingMartin Odersky2015-04-283-9/+9
| | | | | | | | | | | | A missing delta position signifies that the node has the same position as its parent. Once that case was added, we can now enable positions when reading from Tasty.
| * Maintain source files in pickled infoMartin Odersky2015-04-285-17/+31
| | | | | | | | | | | | | | So far: Only one source file is recorded. Should evaluate whether more are needed. Will programs composed from several source files be pickled? They will certainly be generated after inlining, but maybe all that happens after pickling?
| * Unpickler should not label parameter accessors Deferred.Martin Odersky2015-04-281-1/+1
| |
| * Fix definition of empty package so that it can persist membersMartin Odersky2015-04-281-2/+3
| | | | | | | | | | | | Previously, the empty package was always initialized with the empty scope. This means that separate compilation between files in the empty package was not possible.
| * Compiler for embedded TASTY info.Martin Odersky2015-04-283-16/+112
| | | | | | | | `FromTasty` is a main module which compiles TASTY info instead of sources.
| * ClassfileParser and SymbolLoader should return embedded unpicklersMartin Odersky2015-04-284-35/+46
| | | | | | | | | | | | To be able able to post process pickled TASTY tree we let ClassfileParser#run return any embedded unpickler. The unpickler is further propagated by a new method ClassFileLoader#load in SymbolLoaders.
| * Rename Unpickler -> Scala2UnpicklerMartin Odersky2015-04-282-5/+5
| |
* | Erasure: Box closures of value classes when neededGuillaume Martres2015-05-012-1/+53
| | | | | | | | | | | | After erasure, we may have to replace the closure method by a bridge. LambdaMetaFactory handles this automatically for most types, but we have to deal with boxing and unboxing of value classes ourselves.
* | Fix companionClass not working after Erasure for value classesGuillaume Martres2015-05-011-1/+5
| | | | | | | | | | | | | | | | | | | | | | For a module class V$, the synthesized companion class method looks like: val companion$class: V If V is a value class, after erasure it will look like: val companion$class: ErasedValueType(V, ...) This will break SymDenotation#companionClass which relies on the type of companion$class. The solution is to not semi-erase the type of companion$class.
* | New phase: VCInline which inlines value classes callsGuillaume Martres2015-05-014-0/+109
| | | | | | | | | | | | | | | | This corresponds roughly to step 2 of SIP-15 and to the peephole optimizations of step 3. The extractors in TreeExtractors are copied or inspired from src/compiler/scala/tools/nsc/ast/TreeInfo.scala in scalac.
* | Make ExtensionMethods#extensionMethods an object methodGuillaume Martres2015-05-013-68/+76
| | | | | | | | This method will be needed to implement VCInline.
* | Erasure: properly handle null in value classesGuillaume Martres2015-05-012-9/+26
| | | | | | | | This fixes the issues reported in SI-5866 and SI-8097
* | New phase: ElimErasedValueTypeGuillaume Martres2015-05-012-1/+84
| | | | | | | | | | This phase erases ErasedValueType to their underlying type, in scalac this was done in PostErasure.
* | Erasure: properly erase value classesGuillaume Martres2015-05-015-27/+68
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | There are three ways to erase a value class: - In most case, it should be semi-erased to an ErasedValueType, which will be fully erased to its underlying type in ElimErasedValueType. This corresponds to semiEraseVCs = true in TypeErasure. - In a few cases, it should be erased like a normal class, so far this seems to be necessary for: * The return type of a constructor * The underlying type of a ThisType * TypeTree nodes inside New nodes * TypeApply nodes * Arrays In these cases, we set semiEraseVCs = false - When calling `sigName` it should be erased to its underlying type. This commit implements all these cases. Note that this breaks most tests because ElimErasedValueType has not been implemented yet, it is part of the next commit.
* | Add synthetic casts to and from ErasedValueTypeGuillaume Martres2015-05-014-7/+58
| | | | | | | | | | | | | | | | | | | | | | | | | | For a value class V, let U be the underlying type after erasure. We add to the companion object of V two cast methods: def u2evt$(x0: U): ErasedValueType(V, U) def evt2u$(x0: ErasedValueType(V, U)): U The casts are used in Erasure to make it typecheck, they are then removed in ElimErasedValueType (not yet present in this commit). This is different from the implementation of value classes in Scala 2 (see SIP-15) which uses `asInstanceOf` which does not typecheck.
* | RefinedPrinter: Pretty-print ErasedValueTypeGuillaume Martres2015-05-011-0/+3
| |
* | Cache the instantiations of ErasedValueTypeGuillaume Martres2015-05-011-2/+25
| | | | | | | | | | This reduces the number of objects created and speeds up subtyping tests Also make ErasedValueType extend ValueType
* | TypeComparer: Add support for ErasedValueTypeGuillaume Martres2015-05-011-0/+8
| |
* | TypeErasure: replace isSemi by semiEraseVCs and simplify the codeGuillaume Martres2015-05-011-30/+24
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | - isSemi is replaced by semiEraseVCs with a different meaning (but is still unimplemented): * If true, value classes are semi-erased to ErasedValueType (they will be fully erased in ElimErasedValueType which is not yet present in this commit). * If false, they are erased like normal classes. - Fix the documentation of the TypeErasure class which was wrong. - Remove intermediate functions scalaErasureFn, scalaSigFn, javaSigFn and semiErasureFn. It's clearer to just use erasureFn directly instead. - Add an optional parameter semiEraseVCs to TypeErasure#erasure which will be used in Erasure#Typer when we need to disable semi-erasure.
* | TypeErasure: simplify and fix bugsGuillaume Martres2015-05-012-16/+8
| | | | | | | | | | | | | | | | | | | | | | | | | | | | This commit tries to disentangle the TypeErasure class and the TypeErasure object thereby fixing #386. - Remove the `eraseInfo` method in the TypeErasure object, use `transformInfo` instead which takes care of using the correct instance of TypeErasure depending on the symbol to erase. - Remove the unused method `eraseResult` in the TypeErasure class. - In `transformInfo`, use the correct instance of the TypeErasure class when calling `eraseInfo`. - In the `eraseInfo` method of the TypeErasure class, do not call the `erasure` method of the TypeErasure object, instead use the `apply` method of the current instance of TypeErasure.
* | Don't create extension methods for Scala2x value classesGuillaume Martres2015-05-011-1/+2
| | | | | | | | Fixes #387
* | Don't consider the temporary refinement classes as derived value classesGuillaume Martres2015-05-011-0/+1
| |
* | Remove obsolete comment about t2667 failingGuillaume Martres2015-05-011-1/+1
| | | | | | | | It was fixed by #390 and the test was added back in #408.
* | Merge pull request #500 from dotty-staging/implement/i499Dmitry Petrashko2015-04-307-24/+46
|\ \ | | | | | | Implement/i499
| * | Print ByNameTypeTrees in RefinedPrinterMartin Odersky2015-04-241-1/+3
| | | | | | | | | | | | Was missing before, ffell back to raw printing.
| * | Allow byname repated parametersMartin Odersky2015-04-246-24/+44
| | | | | | | | | | | | Implements #499
* | | Replace .entered by .enteredAfter in LazyVals.Dmitry Petrashko2015-04-301-1/+1
| | | | | | | | | | | | Does not fail tests anymore.
* | | LV: change naming convention.Dmitry Petrashko2015-04-301-25/+28
| | |
* | | Comment why LazyVals needs to reorder stats in blocks.Dmitry Petrashko2015-04-301-1/+5
| | |
* | | LV: Rename methods.Dmitry Petrashko2015-04-301-6/+6
| | |
* | | Fix two ArrayIndexOutOfBoundsExceptions in TastyBuffer.Dmitry Petrashko2015-04-301-1/+4
| | |
* | | Decrease default sizes of buffers.Dmitry Petrashko2015-04-303-4/+3
| | | | | | | | | | | | Values are the ones that I got as maximum values for compiling dotty itself.
* | | DottyBackendInterface: interface members cannot be finalDmitry Petrashko2015-04-301-1/+1
| | |
* | | LazyVals: last fix that allows to compile -deep dotc.Dmitry Petrashko2015-04-301-1/+1
| | |
* | | Fix spurious warnings in TreeChecker.Dmitry Petrashko2015-04-301-2/+1
| | |
* | | Fix bug in transformAfter: transform the last denotation in cycle.Dmitry Petrashko2015-04-301-1/+3
| | |
* | | fix a bug in transformAfter: iterate over a new denotation instead of an old ↵Dmitry Petrashko2015-04-301-1/+1
| | | | | | | | | | | | one.
* | | LazyVals: eagerly enter private symbols.Dmitry Petrashko2015-04-301-6/+6
| | |
* | | LazyVals: Synchronized is `Object => Object` after erasure, #505Dmitry Petrashko2015-04-301-2/+5
| | |
* | | LazyVals - do not rely on absence of name clashes in scope.Dmitry Petrashko2015-04-301-3/+3
| | | | | | | | | | | | | | | Was creating correct code, but was assuming that all objects with the same name share same bits. No need to do it.
* | | LazyVals: expected value of flag takes only tree values, no need to use long.Dmitry Petrashko2015-04-301-1/+1
| | |
* | | We do not plan to have more than Int.MaxValue of lazy vals.Dmitry Petrashko2015-04-301-1/+1
| | |
* | | Update comment on ExplicitOuter.Dmitry Petrashko2015-04-301-1/+1
| | |
* | | Fix tpd.ref(sum) to work after erasure.Dmitry Petrashko2015-04-301-1/+11
| | | | | | | | | | | | Erasure finishes work done by Explicit outer, and registers a post condition that This(outer) is not allowed.
* | | Make Lazy-vals generated fields private.Dmitry Petrashko2015-04-301-2/+5
| | |