summaryrefslogtreecommitdiff
path: root/src/compiler
Commit message (Collapse)AuthorAgeFilesLines
*-. Merge remote-tracking branches 'kepler/topic/dumpclasses' and ↵Paul Phillips2011-12-053-3/+25
|\ \ | | | | | | | | | | | | | | | 'joshmarcus/collections_docs' into develop Closes SI-5280.
| * | -Ydump-classes: the option to dump the generated bytecodeluajalla2011-12-053-3/+25
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | -Ydump-classes option is intended to dump the compiler generated bytecode to the .class files in given directory. It can be pretty useful for reflective compilation that utilizes in-memory classloaders, for example to check the files if compiler produces invalid bytecode. In this case the dump helps to understand what exactly is wrong with the emitted class. The option format is -Ydump-classes <dir>.
| | |
| \ \
*-. \ \ Merge remote-tracking branches 'kepler/topic/reifycopypaste' and ↵Paul Phillips2011-12-051-1/+1
|\ \ \ \ | |_|_|/ |/| | | | | | | 'kepler/topic/reifytests' into develop
| * | | A minor fix to -Yreify-copypaste.Eugene Burmako2011-12-051-1/+1
| |/ / | | | | | | | | | | | | | | | | | | Empty modifiers are now correctly printed out as "Modifiers()" instead of annoyingly verbose "Modifiers(Set(), newTermName(""), List())". No review.
* | | Don't generate redundant interfaces.Paul Phillips2011-12-051-1/+13
| | | | | | | | | | | | | | | Dropped redundant parents during bytecode generation to ease trouble on android. Closes SI-5278.
* | | Fix path mangling for 'scala' shell script on MinGW/MSYS.Stefan Zeiger2011-12-051-5/+17
|/ /
| |
| \
*-. \ Merge remote-tracking branches 'kepler/topic/reifyclasses' and ↵Paul Phillips2011-12-044-2/+16
|\ \ \ | | | | | | | | | | | | 'ijuma/feature/signum' into develop
| * | | Reification of classes now produces trees that can be compiled and run.Eugene Burmako2011-12-044-2/+16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Multiple minor fixes to Martin's implementation of reflection infrastructure. Dominating theme is allowing for the fact that compilation via reflection involves numerous exports/imports between various reflection universes. Fixes SI-5230. Review by @odersky.
* | | | Tweaked ident suggestions.Paul Phillips2011-12-043-18/+16
|/ / / | | | | | | | | | | | | | | | | | | Rolled damaru-levenshtein algorithm back to my original "pure" version. Cut max distance to 1. Turned on by default because now it offers nothing unexpected, and removed short-lived -Ysuggest-idents option.
* | | Added -Ysuggest-idents.Paul Phillips2011-12-034-15/+94
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Suggest possible alternatives when an identifier is not in scope. % scala -Ysuggest-idents scala> import scala.collection.mutable._ import scala.collection.mutable._ scala> new MistBuffer <console>:11: error: not found: type MistBuffer (similar: ListBuffer, Buffer) new MistBuffer ^ Too bad, no MistBuffer. We'll settle for ListBuffer.
* | | Eliminated redundant error message.Paul Phillips2011-12-031-5/+3
|/ / | | | | | | | | No secondary "reassignment to val" for unknown identifiers in assignment position.
* | Revert "Fixes the annoying spaces between name, type params and params in ↵Paul Phillips2011-12-021-3/+4
| | | | | | | | | | | | | | | | | | ScalaDoc." This reverts commit 086b558f2d025323c86226b2560578c50ee48b84. It causes two scaladoc tests to fail; the scaladoc tests are almost completely opaque and I have no time to reverse engineer them.
* | Fixes the annoying spaces between name, type params and params in ScalaDoc.Simon Ochsenreither2011-12-021-4/+3
| |
* | Makes it possible to use env(1) to run scala scripts, by droppingDaniel C. Sobral2011-12-011-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | the requirement of a !# line when using it. This is how some other languages, such as ruby, are run. Typical usage: #!/usr/bin/env scala println("Hello, "+args(0)+"!") Contributed by: Daniel C. Sobral
| |
| \
| \
| \
*---. \ Merge remote-tracking branches 'remotes/odersky/master', ↵Paul Phillips2011-12-012-159/+2
|\ \ \ \ | | | |/ | | |/| | | | | 'remotes/odersky/topic/reify', 'remotes/robinst/master' and 'remotes/szeiger/bitset' into pending
| | | * Improved BitSet implementationsStefan Zeiger2011-12-011-159/+0
| | |/ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | - Mutable and immutable BitSets now extend SortedSet, using a fixed Ordering.Int and an efficient bit mask based rangeImpl() - fromArray methods in both implementations are deprecated in favor of new fromBitMask and fromBitMaskNoCopy methods - New toBitMask method for converting bit sets back to Array[Long] bit masks - immutable.BitSet uses a more efficient Builder, based on mutable.BitSet (closes SI-4647) - Delete scala.tools.nsc.util.BitSet (not used anywhere) Review by @odersky
| * / Special treatment of emptyValDef in reifyMartin Odersky2011-12-011-0/+2
| |/ | | | | | | emptyValDef has special meaning in the compiler, so reify needs to preserve it by identity and not just by structure.
* | Fix to the fix of AnnotationInfos.Martin Odersky2011-12-011-1/+1
| | | | | | | | Turns out that forcing AnnotationInfo on .pos is too eager. Protected by if (forced) now.
* | Fix to position in AnnotationInfoMartin Odersky2011-12-011-1/+8
|/ | | | Lazy annotation now return positions and one can also set them. Fixes a problem reported by Greg (no ticket created).
* Fixed -Xfuture 5.ds, deprecated 0-octal.Paul Phillips2011-11-291-38/+40
| | | | | | | | I messed up my trip to the future the first time around; now in the future 5.f is not an error but an attempt to call method "f" on 5 like nature intended. (Thank you simon for catching this.) And deprecated leading 0 for octal. Closes SI-5205.
* Added the check against UnitClass in freeLocals...Eugene Burmako2011-11-291-1/+1
| | | | | | Added the check against UnitClass in freeLocalsTraverser. Closes SI-5245. Review by odersky.
* Attempt to fix #5230. Review by burmako.Martin Odersky2011-11-291-2/+4
|
* Small change to get rid of naming awkwardness f...Martin Odersky2011-11-281-10/+11
| | | | | | | | | Small change to get rid of naming awkwardness for macros. Class based macros now have a parameter section (_this: Tree), module based macrod have an empty pararameter section () instead. So we can let them have the same name, because overloading resolution will distinguish them anyway. Review by burmako.
* -Yreify-copypaste: the copy/pasteable mode for ...Eugene Burmako2011-11-283-1/+68
| | | | | | | | | | | | | | | | | -Yreify-copypaste: the copy/pasteable mode for reification When experimenting with macros, I've found out that it's helpful to use the reifier to find out what Scala idioms map to what Tree shapes. However, stuff emitted by -Yreify-debug is too verbose, that's why I decided to put up a human-readable dumper. To use the dumps, you need to first import the following things: import scala.reflect.api._ import scala.reflect.mirror._ import scala.reflect.api.Modifier._ import scala.reflect.internal.Flags._ The stuff is really experimental, e.g. the tension between flags and modifiers needs to be thought out and addressed. Review by odersky.
* Revised macro defs, added a test case.Martin Odersky2011-11-285-19/+27
|
* Reflection toolboxes now respect settings that ...Eugene Burmako2011-11-284-1/+32
| | | | | | | | | | | Reflection toolboxes now respect settings that are provided to them. Before the fix CompilerCommand lacked the (args, settings, errorFn) ctor. I added it and provided means to augment passed settings with custom errorFn. Closes SI-5239. Review by odersky.
* Experimental version of macro definitions.Martin Odersky2011-11-287-61/+183
|
* Fix for erroneous bytecode generation.Paul Phillips2011-11-2814-126/+110
| | | | | | | | | | | | | | | | | | | A remedy for an IllegalAccessError where generated bytecode referred to an inaccessible type. Closes SI-1430. Bonus materials: - tore out all the invokedynamic support. The shipped jdk7 implementation shows limited resemblance to the one this was written against; the code mostly serves to distract. (I think I could get invokedynamic working pretty quickly, except that it would mean having a codebase for java7 and one for 5-6, which is not a yak I wish to shave today.) - gave NullClass and NothingClass objects of their own, which allowed a nice polymorphic simplification of isSubClass, plus a couple other streamlinings.
* attempt to fix reopened SI-5196michelou2011-11-272-25/+73
|
* Annotations reacquainted with reification.Paul Phillips2011-11-262-68/+78
| | | | | | | Had AnnotationInfo extend Product3 since it's no longer a case class. Tried to make reflection a little more robust. Closes SI-5223, review by vogt.
* low-hanging optimization fruit for virtpatmatAdriaan Moors2011-11-242-77/+97
| | | | | | | | | | | | | | removed unnecessary zero that was added to all matches... providing runOrElse's type args explicitly: speeds up compilation, removes hacks needed to bootstrap a bit of clean up to keep a list of list of treemakers, which encodes the match, until the last possible moment this list of list is going to be the subject of the analyses coming next no review
* Fast PartialFunction # orElse.Martin Odersky2011-11-244-7/+8
|
* Reduced accumulation of repackExistentials.Paul Phillips2011-11-245-63/+58
| | | | | | | | | Was enjoying watching adriaan go for the record for redundant implementations of repackExistential, but eventually everyone has to join Club Code Reuse. Trimmed 2/3 of the implementations and put the remaining third somewhere it can be enjoyed by all. Continued by tearing apart and reassembling TypeVar. Review by moors.
* Minor restructuring in Implicits.Paul Phillips2011-11-245-197/+154
| | | | | | | | | | Another case where I tried to get into the performance party but ended up playing dungeons and dragons next door. However I did come away with an attractive tablecloth, which I draped over Implicits.scala before waving my magic wand. TRANSLATION: it's probably not faster but it's still better.
* Optimization of typedArgs.Paul Phillips2011-11-241-7/+17
| | | | | | | | Keep seeing what might be our single use of Tuple3#zipped so high in the profiling output. I don't think it's zipped3's fault, more that it figures prominently in a major consumer of compile time, but it's not going to hurt to send it on its merry way.
* AnnotationInfo inertia takes me into continuati...Paul Phillips2011-11-234-7/+35
| | | | | | | | | | | | | | | | | | | | | | | | AnnotationInfo inertia takes me into continuations. And kept carrying me until I was carried away. The changes are mostly of the janitorial variety, just doing my part to make the interesting logic visible without being buried in low level compiler plumbing. Added at least one seriously convenient convenience method: tree modifyType fn // equivalent to if (tree.tpe == null) tree else tree setType fn(tree.tpe) This is the analogue to the recently added: symbol modifyInfo fn // same idea It's like having our carpets steam cleaned when we can keep pushing until machinery stays in the machine and the relevant logic stands gloriously on top. You'll eventually exclaim, "I didn't even know these carpets were that color!"
* fixed deprecated number syntaxmichelou2011-11-231-7/+8
|
* - fixed code lifting of String, Int, ...vogt2011-11-231-1/+1
| | | | | Closes SI-3566. Review by moors.
* Slightly revised version for the new starr.Martin Odersky2011-11-232-2/+2
|
* Preparations for new version of AbstractPartial...Martin Odersky2011-11-232-7/+18
| | | | | | Preparations for new version of AbstractPartialFunctions that also does isDefinedAt correctly. Should be a new starr. Review by extempore.
* Reworked AnnotationInfo patch.Paul Phillips2011-11-238-104/+80
| | | | | | | | Took a more ambitious swing based on input from martin. Eliminated the external map and gave annotations a more useful inheritance hierarchy. Eliminated AnnotationInfoBase and made LazyAnnotationInfo an AnnotationInfo (just like LazyType is a Type.) Review by odersky.
* type test optimization now takes GADT hack into...Adriaan Moors2011-11-221-5/+5
| | | | | type test optimization now takes GADT hack into account
* optimized typedSubstAdriaan Moors2011-11-221-19/+24
|
* optimizing type tests and related stuffAdriaan Moors2011-11-222-10/+39
|
* a wider variety of treemakersAdriaan Moors2011-11-221-148/+163
| | | | | | optimized combining substitutions why we substitute in EqualityTestTreeMaker
* optimized version of condAdriaan Moors2011-11-221-0/+19
|
* fixed extraneous output. no review.Martin Odersky2011-11-221-1/+1
|
* Changed the way use cases are handled in scaladoc.Vlad Ureche2011-11-222-3/+21
| | | | | | | | | | If use cases are present, the original member disappears from the list. References SI-5054, but needs more work on the html part. If use cases are present along with links, scaladoc doesn't crash anymore. Closes SI-4898. Review by kzys.
* Compiler part of fast orElse.Martin Odersky2011-11-223-2/+20
| | | | | | | "According to the spec this code should not be legal. Disabling for now." Need to come back and either make it work or (more likely) make nsc reject the test)
* Long-standing performance mystery solved.Paul Phillips2011-11-224-33/+54
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | I noticed a long time ago that calls to def annotations in Symbols figured way, way too high in profiling output, but my earlier efforts to modify it failed because I didn't understand the "accidental" service it was supplying. Here is the key piece of the former implementation of annotations: - val annots1 = initialize.rawannots map { - case x: LazyAnnotationInfo => x.annot() - case x: AnnotationInfo => x - } filterNot (_.atp.isError) The first thing you might notice is that because it calls initialize, any call to either annotations or (more frequently) a method like "hasAnnotation" causes a symbol to be initialized. The upshot is that taking away tens of thousands of calls to initialize means a certain amount of "free lunch" is over. The second thing is that this implementation lead to the allocation of a new list on every call to annotations. 99.999% of the time it's the same elements in the list. The fact that rawannots is typed as a list of "AnnotationInfoBase" which may as well be AnyRef means you can't even use mapConserve, but even mapConserve would be an abuse of the garbage collector given how infrequently there is any change. So here's what we have now: 1) Annotations are delivered from trees to symbols by way of an externally positioned map, not a field on the symbol. It's done once. The only overhead on a call to annotations now is a null check. 2) I added a small sprinkling of calls to initialize in sensible locations. 3) The profiler impact is hard to believe, but this is reproducible. For whatever reason the non-profiler wall clock time impact is not as impressive. My profiling target was the compilation of these 15 files: src/library/scala/collection/generic/G*.scala Before this patch, heap usage peaked at 60MB. After, 35MB. 40% drop in profiler measured time elapsed. (Again, it's not like that outside the profiler.) About a 55% drop in number of allocations. About a 40% drop in total size of allocations. +----------------------+------------------+-----------------+-----------------+ | Name | Time Diff (ms) | Old Time (ms) | New Time (ms) | +----------------------+------------------+-----------------+-----------------+ | +---<All threads> | -19,569 | 52,496 | 32,926 | +----------------------+------------------+-----------------+-----------------+ +----------------------------+--------------------+-----------------------+ | Packages and Classes | Objects (+/-) | Size (+/-) | +----------------------------+--------------------+-----------------------+ | +---<Objects by classes> | -877,387 -56 % | -26,425,512 -37 % | | | | | | | +---char[] | -43,308 -2 % | -2,756,744 -3 % | | | | | | | +---java | -67,064 -3 % | -2,027,264 -2 % | | | | | | | +---scala | -745,099 -48 % | -19,021,760 -26 % | +----------------------------+--------------------+-----------------------+