summaryrefslogtreecommitdiff
path: root/src
Commit message (Collapse)AuthorAgeFilesLines
* Small cleanup in toTypeKind.Lukas Rytz2014-09-011-11/+2
|
* Fix InnerClass / EnclosingMethod attributesLukas Rytz2014-09-0114-214/+273
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This commit seems bigger than it is. Most of it is tests, and moving some code around. The actual changes are small, but a bit subtle. The InnerClass and EnclosingMethod attributes should now be close to the JVM spec (which is summarized in BTypes.scala). New tests make sure that changes to these attributes, and changes to the way Java reflection sees Scala classfiles, don't go unnoticed. A new file, BCodeAsmCommon, holds code that's shared between the two backend (it could hold more, future work). In general, the difficulty with emitting InnerClass / EnclosingMethod is that we need to find out source-level properties. We need to make sure to do enough phase-travelling, and work around destructive changes to the ownerchain in lambdalift (we use originalOwner a lot). The change to JavaMirrors is prompted by the change to the EnclosingMethod attribute, which changes Java reflection's answer to getEnclosingMethod and getEnclosingConstructor. Classes defined in field initializers no longer have an enclosing method, just an enclosing class, which broke an assumption in JavaMirrors. There's one change in erasure. Before this change, when an object declaration implements / overrides a method, and a bridge is required, then the bridge method was actually a ModuleSymbol (it would get the lateMETHOD flag and be emitted as a method anyway). This is confusing, when iterating through the members of a class, you can find two modules with the same name, and one of them doesn't have a module class. Now, such bridge methods will be MethodSymbols. Removed Symbol.originalEnclosingMethod, that is a backend thing and doesn't need to live in the symbol API.
* Don't traverse all trees in delambdafy phase if delambdafy:inlineLukas Rytz2014-09-011-0/+9
| | | | If delambdafy:method is not enabled, the delambdafy method is a nop.
* Fix indentation in delambdafyLukas Rytz2014-08-191-25/+25
|
* Integrate CoreBTypes by composition (not inheritance), non-var fieldsLukas Rytz2014-08-199-202/+253
| | | | | | | Make the fields of CoreBTypes non-variable. Instead, replace the CoreBTypes instance on each compiler run. That results in fewer variables, and the initialization code is directly where the fields are declared, instead of an init method.
* Minor cleanups, integrating review feedbackLukas Rytz2014-08-193-5/+3
| | | | Review was in https://github.com/scala/scala/pull/3855
* Add the ACC_DEPRECATED flag in javaFlags, instead of each call site.Lukas Rytz2014-08-193-25/+9
|
* Remove Tracked, add type information to ClassBTypeLukas Rytz2014-08-199-1503/+1277
| | | | | | | | | | | | | | | | | | | | | | | | | | | Before this change, a ClassBType was just a name. The `exemplars` map stored a Tracked instance for every ClassBType. Tracked stored type information that is required later in the backend when things may run concurrently. In particular: superclass, interfaces, flags and information for emitting the InnerClass attribute. Now we put all the information stored in Tracked directly in the ClassBType. There is still one hash map: `classBTypeFromInternalNameMap` maps a JVM internal class name (e.g. "scala/Predef$") to the corresponding ClassBType. This map is used during bytecode generation, when the ASM framework computes stack map frames. In order to compute stack map frames, the ASM framework needs to be able to get the LUB of two types. The default implementation uses reflection to get type information, however that doesn't work in our case: the classes we compile are not on the classpath. So instead, the backend overwrites the method `getCommonSuperClass` of the ClassWriter. This method receives two class internal names and computes their LUB. This is done by looking up the ClassBTypes in the `classBTypeFromInternalNameMap` and invoking `jvmWiseLUB`. This commit was reviwed in https://github.com/scala/scala/pull/3855. It consists of all commits labelled [squash-after-review], squashed into one.
* Set currentUnit while generating bytecode.Lukas Rytz2014-08-192-3/+5
|
* SI-8512 Infer Any for the qSom Snytt2014-08-121-1/+1
| | | | | | | | | Avoid the widening bug for q. This resolution also suffers from the inference of Any, which can trigger a warning and an anxiety attack. But that's still better than doing the wrong thing. Right?
* SI-8512 Infer a type for f"$args"Som Snytt2014-08-121-1/+1
| | | | | | | | | | | | The f-interpolator gets a type param that better be Any to avoid unfortunate widenings. Hey, it worked! Unfortunately, when `Any` is inferred, `-Xlint:infer-any` takes notice. This is probably a greater problem for the f-interpolator than for quasiquotes, which are a more specialized tool.
* Merge pull request #3907 from gourlaysama/wip/proxyLukas Rytz2014-08-124-0/+4
|\ | | | | a few missing deprecations in proxy collections.
| * a few missing deprecations in proxy collections.Antoine Gourlay2014-07-314-0/+4
| | | | | | | | | | | | SeqProxy was properly deprecated, so were the CollProxyLike classes, and the ones in collection.immutable, but these four somehow survived the Big Proxy Deprecation (tm).
* | Merge pull request #3902 from gourlaysama/wip/t4563Lukas Rytz2014-08-122-1/+9
|\ \ | | | | | | SI-4563 friendlier behavior for Ctrl+D in the REPL
| * | SI-4563 friendlier behavior for Ctrl+D in the REPLAntoine Gourlay2014-07-292-1/+9
| |/ | | | | | | | | | | | | | | | | | | | | | | | | Closing the REPL with Ctrl+D does not issue a newline, so the user's prompt displays on the same line as the `scala>` prompt. This is bad. We now force a newline before closing the interpreter, and display `:quit` while we're at it so that people know how to exit the REPL (since `exit` doesn't exist anymore). The tricky part was to only add a newline when the console is interrupted, and *not* when it is closed by a command (like `:quit`), since commands are processed after their text (including newline) has been sent to the console.
* | Merge pull request #3889 from som-snytt/issue/6476-altLukas Rytz2014-08-123-57/+59
|\ \ | | | | | | SI-6476 Improve error on escapement
| * | SI-6476 Unitize ALL the procedures!Som Snytt2014-07-192-27/+26
| | |
| * | SI-6476 Unitize procedures, readabilitySom Snytt2014-07-192-28/+24
| | | | | | | | | | | | | | | | | | | | | | | | Strictly trivial updates for readability. I used to prefer procedure syntax, but since it was scheduled for removal, I can't scan a def without an equals sign.
| * | SI-6476 DocumentationSom Snytt2014-07-181-0/+2
| | | | | | | | | | | | And adjust the test.
| * | SI-6476 Improve error on escapementSom Snytt2014-07-181-2/+7
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Behavior of escape processing under string interpolation can be confusing. This commit improves the exception message so you know at least what sort of escapes are handled. This came up on SO in the form `s"\d".r`, where it may not be obvious what is throwing and how to work around it. ``` scala> s"\d".r scala.StringContext$InvalidEscapeException: invalid escape '\d' not one of [\b, \t, \n, \f, \r, \\, \", \'] at index 0 in "\d". Use \\ for literal \. scala> s"a\" scala.StringContext$InvalidEscapeException: invalid escape at terminal index 1 in "a\". Use \\ for literal \. ``` Referencing SI-6476 because that has become the magnet ticket for "escape processing under string interpolation, huh?" This doesn't address `$"` and doesn't handle the more interesting parse error `s"a\"b"`.
* | | Merge pull request #3921 from gourlaysama/goodbye-jlineGrzegorz Kossakowski2014-08-0754-7654/+0
|\ \ \ | | | | | | | | remove jline sources from src/ now that we use a released jline.
| * | | remove jline sources from src/ now that we use a released jline.Antoine Gourlay2014-08-0754-7654/+0
| | |/ | |/| | | | | | | | | | | | | We don't need those, right? We don't even build that folder anymore (since 1b0fa91), it is just dead code.
* / | SI-8781 Avoid double-expansion under -Ymacro-expand:discardJason Zaugg2014-08-061-1/+4
|/ / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This mode of macro expansion is used by the presentation compiler to leave the original macro applications ("expandees") in the type checked trees, annotated with the types of the expansions. However, under some circumstances involving implicits, we would re-expand the macro. If the macro wasn't stable, this could lead to a type mismatch. The originally reported problem was with the shapeless `mkSingletonOps` macro. Its expansion had the type of a freshly-named class local to the expansion. Upon the re-expansion, a new class was generated, which lead to errors like: client/Client.scala:4: error: type mismatch; found : fresh$macro$2 required: fresh$macro$1 This commit suppressed re-expansion of the expandee by use of the existing, tree attachment driven mechanism.
* | Merge pull request #3894 from adriaanm/depmsgGrzegorz Kossakowski2014-07-251-5/+6
|\ \ | | | | | | Better error message than 'bad symbolic reference'.
| * | Better error message than 'bad symbolic reference'.Adriaan Moors2014-07-221-5/+6
| | | | | | | | | | | | | | | | | | Let's not scare people, and try to give them some advice. PS: we should really come up with a better mechanism for testing errors/warnings
* | | Merge pull request #3890 from dhgarrette/2.11.xGrzegorz Kossakowski2014-07-251-3/+1
|\ \ \ | | | | | | | | Remove "throws InvalidEscapeException" from StringContext.raw doc
| * | | Fixed incorrect example in StringContext.raw docDan Garrette2014-07-211-1/+1
| | | | | | | | | | | | As pointed out by @som-snytt, \u0023 is #, not \u0025.
| * | | Remove "throws InvalidEscapeException" from StringContext.raw docDan Garrette2014-07-211-2/+0
| |/ / | | | | | | Since StringContext.raw doesn't escape its input, it does not call `treatEscapes` and cannot throw the InvalidEscapeException.
* | | Merge pull request #3884 from mpociecha/remove-invalidation-from-globalGrzegorz Kossakowski2014-07-252-238/+0
|\ \ \ | | | | | | | | Remove invalidation from Global.scala
| * | | Remove invalidation from Global.scalampociecha2014-07-172-238/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The invalidation has been introduced in these commits: https://github.com/scala/scala/commit/167309afd10f9b65b35e6874a30ea6340a1ddc44 https://github.com/scala/scala/commit/ace051ff0abe112b767c3912f846eb4d50e52cf5 https://github.com/scala/scala/commit/e156d4a7cf4afdab91b7c281a0e8ae6e4743cc4a It's safe to remove this functionality. It was added originally to support an experiment with resident compilation. The experiment was performed in sbt and dropped in https://github.com/sbt/sbt/commit/6def08e029e474dc35af04b7403a2aeaddd0dec6 Since then Scala team concluded to not work on resident compilation so it's safe to delete unused code.
* | | | Merge pull request #3826 from lrytz/opt/refactorTrackedGrzegorz Kossakowski2014-07-2515-89/+481
|\ \ \ \ | | | | | | | | | | Assortiment of cleanups and comments around the backend
| * | | | Documentation for isModuleClassLukas Rytz2014-07-081-0/+3
| | | | |
| * | | | Support writing classfile of version 52Lukas Rytz2014-07-083-1/+3
| | | | |
| * | | | Clean up and document some usages of flags in the backendLukas Rytz2014-07-089-44/+154
| | | | |
| * | | | Pattern matching on ClassBType extracts the inernalNameLukas Rytz2014-07-081-22/+27
| | | | |
| * | | | Remove unnessecary check when computing InnerClass attribute flagsLukas Rytz2014-07-081-2/+13
| | | | | | | | | | | | | | | | | | | | The final flag is computed correctly by javaFlags.
| * | | | Comment summarizing the JVM spec for InnerClass / EnclosingMethodLukas Rytz2014-07-081-0/+199
| | | | |
| * | | | Minor cleanups and comments in GenBCodeLukas Rytz2014-07-086-21/+83
| | | | |
* | | | | SI-8743 Fix crasher with poly-methods annotated with @varargsJason Zaugg2014-07-232-32/+16
| |_|/ / |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The code that generated the Java varargs forwarder was basing things on the `ValDef-s` of the parameters of the source method. But, their types refer to a type parameter skolems of the enclosing method, which led to a type mismatch when typechecking the forwarder. Instead, I've reworked the code to simply use the `DefDef`-s symbol's info, which *doesn't* refer to skolems. This actually simplifies the surrounding code somewhat; rather than repeated symbols in a map we can just time travel the pre-uncurry method signatures to figure out which params are releated.
* | | | Merge pull request #3888 from som-snytt/issue/8736v2.11.2Lukas Rytz2014-07-213-9/+19
|\ \ \ \ | | | | | | | | | | SI-8736 Restore -language to former glory
| * | | | SI-8736 Error if no arg and no defaultSom Snytt2014-07-201-6/+9
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Now `-language` with no option will emit an error: ``` $ skalac -feature -language unused.scala scalac error: '-language' requires an option. See '-language:help'. scalac -help gives more information ```
| * | | | SI-8736 Restore -language to former glorySom Snytt2014-07-203-8/+15
| | |_|/ | |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | MultiChoice allows -language to work like -Xlint. The bug as described was that the setting value was set instead of updated (++=) with additional flags. The unreported bug was that `_` no longer set all settings. The corrected behavior is that "contains" means "it was enabled, or _ was set and it was not disabled explicitly." That is the behavior of `-Xlint` but with a different mechanism, since each lint option is a Setting. A semantic difference is that -Xlint enables all the lint options, but -language does not enable all the language features. `scalac -X` does not explain this additional behavior of the `-Xlint` flag. Also worth noting that `scalac -feature -language unused.scala` failed in 2.11.1 but succeeds silently now.
* / | | SI-8738 Regression in range equalityRex Kerr2014-07-201-9/+10
|/ / / | | | | | | | | | | | | | | | Missed the case of comparing a non-empty range to an empty one. Fixed by checking nonEmpty/isEmpty on other collection. Added a test to verify the behavior.
* | | SI-8525 MultiChoice takes a helper functionSom Snytt2014-07-185-20/+40
| | | | | | | | | | | | | | | | | | Clean-up code review comments. MultiChoice takes a helper function for outputting help text.
* | | SI-8525 Multichoice helpSom Snytt2014-07-174-14/+38
| | | | | | | | | | | | | | | | | | Enables -Xlint:help and -language:help. The Settings API makes it difficult to innovate.
* | | SI-8525 Clarify usage of -Xlint:_,flagSom Snytt2014-07-162-63/+66
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Also clarify usage of -Xlint flag. Align more with javac -Xlint:all,-flag,flag where once a flag is explicitly enabled it cannot be disabled, but where the wildcard is a backstop only. (There is no all option yet here.) -Xlint and -Xlint:_ just set a flag which is consulted by any unset lint warning. Xlint warnings consult the state of Xlint when they are unset. Individual -Ywarn-ings do not. Other warnings are explicitly set to false. They can only be enabled programmatically. Some tests are corrected. Also, option order is no longer significant, see the unit test.
* | | Merge pull request #3792 from som-snytt/issue/8525Lukas Rytz2014-07-1611-60/+178
|\ \ \ | | | | | | | | SI-8525 -Xlint:nowarn-missing-interpolator
| * | | SI-8525 No anonymous lintSom Snytt2014-07-108-31/+95
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Turn anonymous references to `settings.lint` into named settings. After that, trust to Adriaan to make them filterable. There are a few remaining top-level -Y lint warnings that are deprecated.
| * | | SI-8525 Add -Xlint:-warn-missing-interpolatorSom Snytt2014-07-083-36/+57
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Turn off lint warnings with negating prefix, and add a lint-only warning for the infamously nagging "Did you forget the interpolator?" That message is made more dignified. Without `-Xlint:false`, there is no mechanism to turn off anonymous linters once `-Xlint` is selected.
| * | | SI-8616 Error on -deprecation:true,falseSom Snytt2014-07-081-2/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This is an error, not a crash. Alternatively, one could define the multivalued colon case as equivalent to specifying the option multiple times. That would be very regular. But sometimes it's nicer just to error out.