summaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
...
* | | | | Updated checkfile with IndexedSeq signature.Paul Phillips2012-01-111-1/+1
| | | | |
* | | | | Rescued some import-related code.Paul Phillips2012-01-102-15/+29
| | | | | | | | | | | | | | | | | | | | So I can get at it from the repl.
* | | | | Traitified JavaConverters.Paul Phillips2012-01-101-1/+4
| | | | | | | | | | | | | | | | | | | | So it can be used as a mixin.
* | | | | Merge remote-tracking branch 'odersky/master'Paul Phillips2012-01-107-7/+7
|\ \ \ \ \
| * | | | | Fixing redundant type parameter in toIndexedSeq which causes suboptimal type ↵Martin Odersky2012-01-107-7/+7
| | | | | | | | | | | | | | | | | | | | | | | | inference
* | | | | | Revert "Accept prefixed xml attributes with null value"Paul Phillips2012-01-102-31/+9
|/ / / / / | | | | | | | | | | | | | | | | | | | | This reverts commit 51089b34a7a535498dee42e6465d4d577d65b7d5. A scaladoc test is failing and I have no time to look at it.
* | | | | Remove maven deply from epfl-publish script.Lukas Rytz2012-01-101-18/+0
| | | | | | | | | | | | | | | | | | | | This is done by the separate scala-nightly-maven-deploy jenkins job, doing it here fails depending on the build machine (/home/linuxsoft/... is not available everywhere).
* | | | | Revert "Restored an implicit."Paul Phillips2012-01-091-5/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This reverts commit daeb8f75ec3db065703d225fdb7f0aca34514333. That didn't go well.
* | | | | Restored an implicit.Paul Phillips2012-01-091-3/+5
| | | | | | | | | | | | | | | | | | | | Because sbt's generated API code depends on it.
* | | | | Better error reporting regarding main methods.Paul Phillips2012-01-097-43/+137
| |/ / / |/| | | | | | | | | | | | | | | | | | | Now notices most things which look like main methods and says something useful if they aren't usable as entry points. Closes SI-4749.
| | | |
| \ \ \
| \ \ \
| \ \ \
*---. \ \ \ Merge remote-tracking branches 'odersky/master', 'odersky/topic/capturing' ↵Paul Phillips2012-01-097-12/+50
|\ \ \ \ \ \ | | | | | | | | | | | | | | | | | | | | | and 'szabolcsberecz/xml-attribute-fix'
| | | * | | | Accept prefixed xml attributes with null valueSzabolcs Berecz2012-01-072-9/+31
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This changes makes PrefixedAttribute work the same way as UnprefixedAttribute with respect to null values: <t p:a={ null: String }/> is accepted and results in <t/>
| | | * | | | Fixed equality and string representation of xml attributes with null valueSzabolcs Berecz2012-01-076-6/+22
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Prior to this patch <t a={ null: String }/> was not equal to <t/> and it's string representation was "<t ></t>" instead of "<t></t>" This includes changing MetaData.normalize() so that it doesn't reverse the chain. On the downside, the iterate function in MetaData.normalize() is not tail-recursive now.
| | * | | | | Changed boxing of free mutable variables to be flexible wrt when liftcode ↵Martin Odersky2012-01-028-122/+105
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | takes place. A major redesign that unifies the various different approaches to boxing of free variables. Free variables are marked with CAPTURED and eliminated by LambdaLift. I also added some hooks in MacroContext that a reifier needs to use.
| | * | | | | Hardening of adaptoNewRun to survive issues in presentation compiler.Martin Odersky2012-01-011-4/+8
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Previously, adaptToNewRun crashed when an object declaration got replaced by a value with the same name, because the module class no longer existed. This caused crashes in the presentation compiler when class files disappeared because of a clean build. The new behavior avoids assertion errors.
| * | | | | | Closes SI-5354.Martin Odersky2012-01-044-7/+39
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The reason why the test case compiled without error is pretty devious: When checking the `Foo.x' implicit, a CyclicReference error occurs which causes the alternative to be discarded. Why a CylicReference? Because the inferencer tries to decide whether the owner of `z` is a subclass of the owner od `x`. To do this, it computed the info of the owner of `z1`, which is not complete because no result type for `f1` was given. Hence a CyclicReference error. The fix is twofold: (1) We make isNonBottomSubClass smarter so that it always returns false if the symbol in question is not a type; hence the info need not be computed. (2) It's dubious to swallow CyclicReference errors anywhere, but I deemed it too risky to propagate them. But at least the CyclicReference is now logged if -Ylog-implicit is true. This hopefully spares future maintainers the same detective work I had to go through when digging this out.
* | | | | | | Fix for PartialFunction NPE.Paul Phillips2012-01-082-2/+9
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Was going straight to the field and bypassing the null guard. Closes SI-5300.
* | | | | | | Don't hard fail over missing classfiles.Paul Phillips2012-01-071-2/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | There's no need to blow up when a classfile references other classes which aren't present. We can struggle onward and maybe it'll turn out they had no intention of trying to get at the class that isn't there. I have all kinds of confidence scala will find a way to fail when the time comes. Closes SI-5343.
* | | | | | | Cleanups in Cleanup.Paul Phillips2012-01-076-85/+120
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Seeing about getting delayedInit working (not to mention the breakage it is inflicting elsewhere) which led me into Cleanup and some of its buddies.
* | | | | | | Made type constraint propagation off by default.Paul Phillips2012-01-071-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Wow, it fails only during strap.comp. That is certainly a first for me, managing to build quick and pass all the tests only to be unable to rebuild the compiler from quick. Must be something fascinating taking place in there. So for now I flipped the switch back down.
* | | | | | | TypeConstraint/TypeVar refinement.Paul Phillips2012-01-073-25/+39
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | I zeroed in on the actual conditions under which the parameter bounds can be utilized without poisoning the well. Also fixed a bug in ClassfileParser where it would get confused and set Any as a lower bound, as well as a bug or at least misbehavior where a TypeBounds with only Any/Nothing as an upper/lower bound would be treated differently than one with no bound at all. Review by @moors.
* | | | | | | Made Array manifests return type arguments.Paul Phillips2012-01-073-3/+13
| |_|/ / / / |/| | | | | | | | | | | | | | | | | Closes SI-3758.
* | | | | | Remedy spurious bounds conformance failure.Paul Phillips2012-01-062-6/+23
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Misters hkarg and hkparam have to work harder to see things from the same perspective, so they don't end up in a huff over bounds which were the same all along. Closes SI-5020, review by @moors.
* | | | | | Output improvements for TypeVar tracing.Paul Phillips2012-01-061-10/+12
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | You should really try this out, anonymous commit log reader. scala -Dscalac.debug.tvar
* | | | | | Fix for crasher where Arrays meet abstract types.Paul Phillips2012-01-063-4/+27
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This sort of thing was crashing. No longer. trait Fooz[Q <: Array[_]] { def f0(x: Q) = x.length }
* | | | | | Fix for crasher during type inference.Paul Phillips2012-01-063-2/+83
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Well, "fix" is pretty generous, how about "workaround". It does seem to do the job. Closes SI-4070, review by @moors.
* | | | | | TypeVar tracing.Paul Phillips2012-01-063-86/+163
| |_|_|_|/ |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | % scala -Dscalac.debug.tvar scala> class Foo[CC[X] <: Traversable[X]] { def bar[T](xs: CC[T]) = xs.head } defined class Foo scala> new Foo bar List(1,2,3) [ create] ?CC ( In Foo[CC[X] <: Traversable[X]] ) [ create] ?CC ( In Foo[CC[X] <: Traversable[X]] ) [ setInst] Nothing ( In Foo[CC[X] <: Traversable[X]], CC=Nothing ) [ create] ?CC ( In Foo[CC[X] <: Traversable[X]] ) [ create] ?T ( In Foo[CC[X] <: Traversable[X]]#bar[T] ) [ create] ?A ( In List#apply[A] ) [ create] ?A ( In List#apply[A] ) [ setInst] Int ( In List#apply[A], A=Int ) [ create] ?CC ( In Foo[CC[X] <: Traversable[X]] ) [ create] ?T ( In Foo[CC[X] <: Traversable[X]]#bar[T] ) [ create] ?CC ( In Foo[CC[X] <: Traversable[X]] ) [ applyArgs] ?CC ( In Foo[CC[X] <: Traversable[X]], apply args ?T to CC ) [ setInst] List ( In Foo[CC[X] <: Traversable[X]], CC=List ) [ setInst] Int ( In Foo[CC[X] <: Traversable[X]]#bar[T], T=Int ) res0: Int = 1 Also, I gave TypeVar some polymorphism. Review by @moors.
* | | | | Error message improvement.Paul Phillips2012-01-053-4/+22
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | % scalac files/neg/t5357.scala files/neg/t5357.scala:5: error: '=>' expected but ':' found. case A: N => 1 ^ one error found That's uggo! Now it says: % scalac files/neg/t5357.scala files/neg/t5357.scala:5: error: Pattern variables must start with a lower-case letter. (SLS 8.1.1.) case A: N => 1 ^ one error found
* | | | | Init order issue in Manifest toStrings.Paul Phillips2012-01-051-43/+22
| | | | | | | | | | | | | | | | | | | | | | | | | Making -Xcheckinit happy. Then cleaned up the anyval and phantom type manifests once in the neighborhood.
* | | | | Fix issue with higher-order type params.Paul Phillips2012-01-053-13/+51
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | I think I found an issue underlying more than one bit of sketchy behavior amongst CC[_] and friends. Plus, I managed to initialize TypeConstraints with the bounds of the originating type parameter. I feel like that should cause something nifty to happen somewhere, but I have seen neither confetti nor lasers in greater quantities than I usually do. Will keep my remaining eye out. Closes SI-5359, review by @moors.
* | | | | More consistent use of Names.Paul Phillips2012-01-0573-993/+1205
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Several large helpings of tedium later, fewer strings are being discarded like so much refuse. Some names now cache a String, but only "named Names", so it's not very many and they pay for themselves pretty quickly. Many fewer name-related implicit conversions now taking place. A number of efficiency related measures.
* | | | | Merge branches 'findMemberRewrite-redux' and 'jan4-map-paramss'Paul Phillips2012-01-0510-47/+51
|\ \ \ \ \
| * | | | | Consolidated misc collections helper methods.Paul Phillips2012-01-0510-47/+51
| | | | | | | | | | | | | | | | | | | | | | | | Streamlining some of our more common operations.
* | | | | | Optimization in refchecks.Paul Phillips2012-01-053-2/+5
| | | | | | | | | | | | | | | | | | | | | | | | Making the inherited java vararg check cheaper.
* | | | | | Optimization in genjvm.Paul Phillips2012-01-051-22/+15
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Again trying to reduce the load on findMember by supplying flags to exclude.
* | | | | | Optimization in Constructors.Paul Phillips2012-01-052-20/+12
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Reworked some old code which was far too expensive for the job it was performing.
* | | | | | Optimizing findMember.Paul Phillips2012-01-052-11/+23
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Profiled for the most frequent drinkers at the findMember tavern and gave them bracelets so they don't have to always be hassling the bartender.
* | | | | | Moved Origins into scala.reflect.internal.util.Paul Phillips2012-01-052-9/+9
|/ / / / / | | | | | | | | | | | | | | | | | | | | It's too handy and I can't reach it from key classes whose calls I want to profile.
* | | | | Fix in bytecode generation.Paul Phillips2012-01-051-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Don't generate invokeinterface instructions when the target is an interface but the method being called is defined in java.lang.Object. Android chokes on them, but regardless, invokevirtual will be faster and more pleasing to all the more discriminating vms.
* | | | | Don't mark mixed in methods as bridges.Paul Phillips2012-01-052-1/+15
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Sometime during the signature-related chaos before 2.9.1, genjvm was modified to pin ACC_BRIDGE onto mixed-in methods. This isn't necessary to suppress the signature (which has already happened at that point) and has deleterious effects since many tools ignore bridge methods. Review by @odersky.
* | | | | Fix for NoSuchMethod in cleanup.Paul Phillips2012-01-043-1/+29
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Don't assume that just because someone is calling x.toInt and x <: java.lang.Number, that it's a boxed primitive. Closes SI-5356.
* | | | | Don't infer protected members into lub refinements.Paul Phillips2012-01-041-12/+21
| | | | | | | | | | | | | | | | | | | | Following up to the previous, taking my own advice in SI-5352.
* | | | | Fix bugs with lubs.Paul Phillips2012-01-041-2/+32
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Was not substituting before using fallback lub. I don't think it was hurting anything because the substitution is wrong anyway, since it gives up on f-bounds. (This is directly responsible for the malformed lubs.) But if it must fail, it shouldn't be letting A and Repr escape into the error message: scala> List(List(), Stream()) <console>:8: error: type mismatch; found : List[Nothing] required: scala.collection.immutable.LinearSeq[Nothing] with ..... scala.collection.LinearSeqOptimized[A,Repr]]]]] List(List(), Stream()) ^ Rather, like this: found : List[Nothing] required: scala.collection.immutable.LinearSeq[Nothing] with ..... scala.collection.LinearSeqOptimized[Nothing,scala.collection.immutable.Stream[Nothing]]]]]] Also, AbstractSeq and other not-public classes were appeaing in the errors, alerting me to the fact that it would happily infer a lub containing a type which cannot be referenced. scala> List(List(), Vector()) res1: List[scala.collection.immutable.Seq[Nothing] with scala.collection.AbstractSeq[Nothing] ... So I excluded non-public types in lubList: scala> List(List(), Vector()) res0: List[scala.collection.immutable.Seq[Nothing]] = List(List(), Vector()) Finally, I added logging for recursive bounds. % scala -Ydebug scala> List(List(), Stream()) Encountered 2 recursive bounds while lubbing 2 types. type A in trait LinearSeqOptimized appears in the bounds of type Repr type Repr >: scala.this.Nothing <: collection.this.LinearSeqOptimized[A,Repr] type Repr in trait LinearSeqOptimized appears in its own bounds type Repr >: scala.this.Nothing <: collection.this.LinearSeqOptimized[A,Repr] Review by @moors.
* | | | | Closes SI-5354.Martin Odersky2012-01-044-7/+39
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The reason why the test case compiled without error is pretty devious: When checking the `Foo.x' implicit, a CyclicReference error occurs which causes the alternative to be discarded. Why a CylicReference? Because the inferencer tries to decide whether the owner of `z` is a subclass of the owner od `x`. To do this, it computed the info of the owner of `z1`, which is not complete because no result type for `f1` was given. Hence a CyclicReference error. The fix is twofold: (1) We make isNonBottomSubClass smarter so that it always returns false if the symbol in question is not a type; hence the info need not be computed. (2) It's dubious to swallow CyclicReference errors anywhere, but I deemed it too risky to propagate them. But at least the CyclicReference is now logged if -Ylog-implicit is true. This hopefully spares future maintainers the same detective work I had to go through when digging this out.
* | | | | Added forall to Option.Paul Phillips2012-01-031-0/+7
| | | | | | | | | | | | | | | | | | | | Another salvo in the war against option2Iterable.
* | | | | Optimization/robustness in the backend.Paul Phillips2012-01-0318-198/+279
|/ / / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Trying to help icode/jvm get through their business a bit faster, and also make things more robust. Less null, more distinguished objects. More encapsulation, fewer public vars. Helping updateSuccessorList() to avoid assembling a list of successors on every call only to find most of the time that it's the same list it already had (e.g. compiling quick.lib it says "59076 calls, 690 requiring allocation" rather than 59076 calls, 59076 requiring allocation.)
* | | | updated gitignore.SAMPLE, moved removed . from .project.SAMPLE to be in line ↵Lukas Rytz2012-01-033-13/+15
| | | | | | | | | | | | | | | | with the other files.
* | | | Added option -Xlog-reflective-calls.Paul Phillips2012-01-023-4/+8
| | | | | | | | | | | | | | | | | | | | | | | | | | | | A message is emitted when a reflective call is generated. We can now be eager consumers of this since we purged all the reflective calls at some point -- but without a backstop, they have been slipping back in.
* | | | Added -Xlog-implicit-conversions.Paul Phillips2012-01-0214-25/+91
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | New command line option prints a message whenever the compiler inserts an implicit conversion. Implicit parameters are not under consideration here, since the primary motivation is to make it easy to inspect your code for unintentional conversions, since they can have dramatic performance implications. class A { def f(xs: Array[Byte]) = xs.size def g(xs: Array[Byte]) = xs.length } % scalac -Xlog-implicit-conversions logImplicits.scala logImplicits.scala:2: applied implicit conversion from xs.type to ?{val size: ?} = implicit def byteArrayOps(xs: Array[Byte]): scala.collection.mutable.ArrayOps[Byte] def f(xs: Array[Byte]) = xs.size ^
* | | | Changed boxing of free mutable variables to be flexible wrt when liftcode ↵Martin Odersky2012-01-028-122/+105
| | | | | | | | | | | | | | | | | | | | | | | | takes place. A major redesign that unifies the various different approaches to boxing of free variables. Free variables are marked with CAPTURED and eliminated by LambdaLift. I also added some hooks in MacroContext that a reifier needs to use.