summaryrefslogtreecommitdiff
path: root/src/compiler
Commit message (Collapse)AuthorAgeFilesLines
...
| * | | SI-6843 well-positioned syntax errors for quasiquotesDen Shabalin2013-08-144-50/+69
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This is achieved in a following way: 1. Similarly to toolbox quasiquotes can go away with wrapping for parsing purpose after introduction of `parseStats` and `parseRule` entry points. 2. In case of syntax error quasiquote computes equivalent corresponding position in the source code with the help of `corrrespondingPosition` mapper which relies on position data collected into `posMap` during code generation.
| * | | SI-7331 remove all the wrapping code from toolboxDen Shabalin2013-08-141-7/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Change toolbox parsing to use `parseStats` parser entry point instead of current code-wrappign technique that makes positions much less useful to end users. There is also no need to create a compiler `Run` for parsing.
| * | | refactor parser entry points and extract a few methods outDen Shabalin2013-08-141-30/+46
| |/ / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This commit contains three logical changes: 1. Split `templateStatSeq` into two methods as we need more reliable parsing of template body alone for new `parseStats` entry point. 2. Add new parser entry point called `parseStats` which is aimed towards use in tools that require parsing of Scala code that can be written inside of a template. Such functionality is required for parsing lines in repl, parsing code through toolbox, parsing and running scala scripts and lastly for quasiquotes. All of them are refactored to use this very method in the next commits. A new method called `templateStatsCompat` is also added to make this commit pass the tests but it's a temporary hack that will be removed in next commit in favor of `parseStats`. 3. Extract out a few methods like `isCaseDefStart`, `expectedMsgTemplate` and `parseRule`. These are needed to override parser behaviour in updated quasiquotes parser (see next commits).
* | | Merge pull request #2823 from som-snytt/issue/7715Adriaan Moors2013-08-162-42/+67
|\ \ \ | | | | | | | | SI-7715 String inpatternation s"$_" for s"${_}"
| * | | SI-7715 String inpatternation s"$_" for s"${_}"Som Snytt2013-08-122-42/+67
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | In a pattern, ``` scala> implicit class RX(val sc: StringContext) { | def rx = sc.parts.mkString("(.+)").r } defined class RX scala> "2 by 4" match { case rx"$a by $_" => a } res0: String = 2 scala> val rx"$_ by $b" = "2 by 4" b: String = 4 ```
* | | | Merge pull request #2821 from xeno-by/topic/fundep-materializationAdriaan Moors2013-08-161-12/+52
|\ \ \ \ | | | | | | | | | | SI-7470 implements fundep materialization
| * | | | SI-7470 implements fundep materializationEugene Burmako2013-08-131-12/+52
| |/ / / | | | | | | | | | | | | | | | | | | | | | | | | This fix provides implicit macros with an ability to affect type inference in a more or less sane manner. That's crucial for materialization of multi-parametric type class instances (e.g. Iso's from shapeless). Details of the technique can be found in comments.
* | | | Merge pull request #2785 from soc/SI-7704Adriaan Moors2013-08-164-24/+24
|\ \ \ \ | | | | | | | | | | SI-7704 Fix partest's test category selection
| * | | | Clean up ConsoleRunner, --> returns Boolean ...Simon Ochsenreither2013-07-301-3/+3
| | | | | | | | | | | | | | | | | | | | ... not Unit now.
| * | | | Add some explicit return types to s.t.c._Simon Ochsenreither2013-07-303-15/+15
| | | | |
| * | | | SI-7704 Fix partest's test category selectionSimon Ochsenreither2013-07-303-6/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | My recent changes to command line parsing in 6090709 broke partest's functionality of picking test categories (e. g. --pos or --run). The breakage was caused because scala.tools.cmd._ stored the command line options with the `--` prefix, but TestKinds.standardKinds did not.
* | | | | Merge pull request #2798 from som-snytt/issue/7544-errmsgAdriaan Moors2013-08-161-1/+2
|\ \ \ \ \ | |_|_|_|/ |/| | | | SI-7544 Interpolation message for %% literal
| * | | | SI-7544 Interpolation message for %% literalSom Snytt2013-08-061-1/+2
| | |/ / | |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The new error text: "conversions must follow a splice; use %% for literal %, %n for newline". The error is emitted when % is not at the start of a part; only the non-conversions %% and %n are allowed. It would be nice if it were convenient to parse the part to see what the user may have intended, but c'est l'erreur.
* | | | SI-7624 Fix a few remaining -Xlint warnings ...Simon Ochsenreither2013-08-1511-28/+11
| | | | | | | | | | | | | | | | | | | | in various places. This includes actors, compiler (mostly some new macro parts) continuations, partest, scaladoc, scalap.
* | | | SI-7624 Fix -Xlint warnings in AnyVal-related codeSimon Ochsenreither2013-08-152-9/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The changes are actually pretty small: scala.language.implicitConversions is moved around so that it is only emitted to the source file if there is an actual implicit conversion. The rest of the diff are mostly the new generated source files reflecting that change.
* | | | Formatting fixes for AnyValSimon Ochsenreither2013-08-151-59/+42
| | | | | | | | | | | | | | | | | | | | The files are not regenerated here, because additional fixes will follow in the next commit.
* | | | SI-7624 Fix -feature warnings and build with -featureSimon Ochsenreither2013-08-152-1/+2
| |_|/ |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | I added a language.existential import to LazyCombiner.scala which should not be necessary, but causes a spurious warning otherwise: scala/src/library/scala/collection/parallel/mutable/LazyCombiner.scala:33: warning: the existential type scala.collection.parallel.mutable.LazyCombiner[_$1,_$2,_$3] forSome { type _$1; type _$2; type _$3 <: scala.collection.generic.Growable[_$1] with scala.collection.generic.Sizing }, which cannot be expressed by wildcards, should be enabled by making the implicit value scala.language.existentials visible. if (other.isInstanceOf[LazyCombiner[_, _, _]]) { ^ I created ticket SI-7750 to track this issue.
* | | Merge pull request #2804 from adriaanm/rebase-2763Adriaan Moors2013-08-122-3/+11
|\ \ \ | | | | | | | | SI-7690 ghost error message fails compile [Rebase of #2763]
| * | | SI-7690 ghost error message fails compilePaul Phillips2013-08-112-3/+11
| |/ / | | | | | | | | | | | | | | | I won't even try to explain the error reporting code, because it would have no basis in reality. However this change appears to fix the symptom reported.
* | | Merge pull request #2812 from xeno-by/topic/defdef-name-now-termnameGrzegorz Kossakowski2013-08-124-4/+4
|\ \ \ | | | | | | | | DefDef.name is now TermName again
| * | | DefDef.name is now TermName againEugene Burmako2013-08-104-4/+4
| |/ / | | | | | | | | | | | | Now when there's no hope left for type macros, it's reasonable to provide a more specific type for DefDef.name.
* | | Merge pull request #2797 from paulp/pr/erasure-n-squaredGrzegorz Kossakowski2013-08-121-1/+2
|\ \ \ | |/ / |/| | Fix N^2 spot in erasure.
| * | Fix N^2 spot in erasure.Paul Phillips2013-08-051-1/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | An expression containing nested casts would type the same tree 2^N times where N is the number of nested casts. This was particularly visible in Vector.scala where one can find a six-cast expression. It's currently line "why was six afraid of seven", aka line 789. display5((index >> 25) & 31) .asInstanceOf[Array[AnyRef]]((index >> 20) & 31) .asInstanceOf[Array[AnyRef]]((index >> 15) & 31) .asInstanceOf[Array[AnyRef]]((index >> 10) & 31) .asInstanceOf[Array[AnyRef]]((index >> 5) & 31) .asInstanceOf[Array[AnyRef]](index & 31) .asInstanceOf[T] Compiling Vector.scala, before/after. < #unique types : 10805 > #unique types : 9722 < #created tree nodes : 26716 > #created tree nodes : 25647 I found a similar bug about a year ago in 39f01d4f48. It's interesting to consider how little defense we have against bugs of this nature - visually non-obvious differences in tree traversal can have spectacular impact on complexity.
* | | Merge pull request #2776 from gkossakowski/symbolTable-refactoringsGrzegorz Kossakowski2013-08-0611-201/+261
|\ \ \ | |/ / |/| | Refactor the cake so SymbolTable does not depend on Global
| * | Address TODOs around SymbolLoaders and SymbolTable.Grzegorz Kossakowski2013-07-305-42/+36
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | SymbolTable refactoring introduced some TODOs that were supposed to be addressed after M5 release. The reason I couldn't address those problems right away was a conflict with our plans to modularize Scaladoc and interactive. However, we decided to delay that work until after M5 is released so addressing TODOs is not blocked anymore. This commit introduces the following changes: * Eclipse project definitions for interactive and scaladoc depend on scala-compiler project so they are builded against latest version of the compiler (quick) instead of STARR. This aligns our Eclipse project definitions with build.xml structure. * Introduce GlobalSymbolLoaders class which wires dependencies of SymbolLoaders with assumption of dependency on Global. * Switch to GlobalSymbolLoaders in BrowsingLoaders, interactive Global and ScaladocGlobal; this eliminates all TODO comments introduced before
| * | Fix Platform type in Global to be JavaPlatform.Grzegorz Kossakowski2013-07-273-40/+14
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | At the moment we have just one Platform: JavaPlatform in the compiler. The whole Platform abstraction feels dubious and Java backends need to downcast to JavaPlatform to implement some optimizations. It seems like for now it's just better to fix platform declared in Global to be JavaPlatform and get rid of downcasting. I checked that even JavaScript backend declares itself as a subtype of JavaPlatform so it seems like our abstraction is not that useful. If we have an alternative platform with specific requirements we might want to refactor our Platform abstraction again but for now it seems dubious to pay a price for abstraction nobody uses.
| * | Refactor the cake so SymbolTable does not depend on GlobalGrzegorz Kossakowski2013-07-2710-50/+91
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This is rather large commit so I'll first explain the motivation behind it and then go through all changes in detail explaining the choices I made. The motivation behind this refactoring was to make SymbolTable unit testable. I wanted a lightweight way of initializing SymbolTable and then writing unit tests for subtyping algorithm, various functionality related to Symbols, etc. All of that should be possible by precisely controlling what we test, e.g., create types and symbols by hand and not have them defined in source code as we normally do in partest (functional) tests. The other motivation was to reduce and clarify dependencies we have in the compiler. Explicit dependencies lead to cleaner design. Also, explicit and reduces dependencies help incremental compilation which is a big problem for us in compiler's code base at the moment. One of the challenges I faced during that refactoring was cyclic dependency between Platform and SymbolLoaders. Platform depended on `SymbolLoaders.SymbolLoader` because it would define a root loader. SymbolLoaders depended on Platform for numerous reasons like deferring decision how to load a given symbol based on some Platform-specific hooks. I decided to break that cycle by removing methods related to symbol loading from Platform interface. One could argue, that better fix would be to make SymbolLoaders to not depend on Platform (backend) concept but that would be much bigger refactoring. Also, we have a new concept for dealing with symbol loading: Mirrors. For those reasons both `newClassLoader` and `rootLoader` were dropped from Platform interface. Note that JavaPlatform still depends on Global so it can access phases defined in Global to implement `platformPhases` method. Both GenICode and BCodeBodyBuilder have some Platform specific logic that requires casting because pattern matcher doesn't narrow types to give them a proper refinement. Check the changes for details. Some logging utilities has been moved from Global to SymbolTable because they are accessed by SymbolTable. Since Global inherits from SymbolTable this should be a source compatible change. The SymbolLoaders has dependency on `compileLate` method defined in Global. The purpose behind `compileLate` is not clear to me but the dependency looks a little bit dubious. At least we made that dependency explicit. ScaladocGlobal and Global defined in interactive has been adapted in a way that makes them compile both with quick.comp and 2.11.0-M4 so my refactorings are not blocking the modularization effort.
| * | Deprecate Platform.BinaryRepr.Grzegorz Kossakowski2013-07-274-26/+16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The 27c8266e introduced `Platform.BinaryRepr` abstract type that was meant to abstract over binary representation of a classfile. The abstraction was needed at the time because we had both jvm backend and msil backend. The msil backend has been removed but the abstraction was kept in place. The type has been deprecated and set to be an alias for AbstractFile. The alias will be removed later in 2.11 milestone cycle. All references to `Platform.BinaryRepr` has been removed in the compiler in favour of using AbstractFile directly. If we ever need to abstract over multiple backends we should do that based on real requirements of given backends. This is a first step towards breaking the cyclic dependency between Platform and SymbolLoaders.
| * | Remove dependency on typer phase in ClassfileParser.Grzegorz Kossakowski2013-07-275-6/+53
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ClassfileParser depends on forcing infos during typer phase. It's not entirely clear why this is needed (git blame doesn't help much) but I decided to preserve the logic. Therefore, I introduced an abstract method called `lookupMemberAtTyperPhaseIfPossible` which preserves the original semantics but is implemented outside of ClassfileParser so the ClassfileParser itself doesn't need to depend on typer phase and phase mutation utilities. I removed `loaders` override in `test/files/presentation/doc`. I would have to update it to implement the `lookupMemberAtTyperPhaseIfPossible` method. However, the override doesn't seem to be doing anything useful so I just removed it.
| * | Move ICodeReader-specific logic out of ClassfileParser.Grzegorz Kossakowski2013-07-273-95/+109
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ClassfileParser contained some ICodeReader-specific logic like `forceMangledName` and `getMemberSymbol` methods. The `getMemberSymbol` method was defined in ConstantPool class because it must access some internal state of ConstantPool. In order to move that method to ICodeReader we had two options: 1. Make all internal state accessible from outside of ConstantPool class so getMemberSymbol could be implemented outside of ConstantPool hierarchy 2. Make it possible to subclass ConstantPool in ICodeReader so getMemberSymbol can be implemented in a subclass and can access internal state of ConstantPool Given the fact that getMemberSymbol mutates ConstantPool's internal state I decided that subclassing is a cleaner approach. It required significant refactoring because we had to make sure that we create an instance of proper class when initializing the `pool` variable. I ended up introducing `ConstantPoolManager` class which is essentially a mutable variable that can be reset multiple times. This change makes ClassfileParser independent from the ICodeReader and its implementation details.
* | | Merge remote-tracking branch 'scala/master' into merge-2.10.xGrzegorz Kossakowski2013-07-297-279/+364
|\ \ \ | | |/ | |/|
| * | Merge pull request #2746 from soc/topic/paulp-typer-debug-outputAdriaan Moors2013-07-297-279/+364
| |\ \ | | | | | | | | Improve type printing (toString/debugging)
| | * | Make -Ytyper-debug output readable.Paul Phillips2013-07-177-279/+364
| | | |
* | | | Merge remote-tracking branch 'scala/2.10.x' into merge-2.10.xGrzegorz Kossakowski2013-07-295-16/+29
|\ \ \ \ | |/ / / |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Conflicts: bincompat-backward.whitelist.conf bincompat-forward.whitelist.conf src/compiler/scala/reflect/reify/phases/Reshape.scala src/compiler/scala/tools/nsc/symtab/classfile/ClassfileParser.scala src/compiler/scala/tools/nsc/transform/Mixin.scala src/compiler/scala/tools/nsc/typechecker/RefChecks.scala src/compiler/scala/tools/nsc/typechecker/Typers.scala src/library/scala/concurrent/impl/Promise.scala src/reflect/scala/reflect/internal/StdAttachments.scala test/files/neg/macro-override-macro-overrides-abstract-method-b.check test/files/run/t7569.check
| * | | Merge pull request #2750 from retronym/ticket/7455-2.10.xGrzegorz Kossakowski2013-07-271-2/+11
| |\ \ \ | | | | | | | | | | SI-7455 Drop dummy param for synthetic access constructor
| | * | | SI-7455 Drop dummy param for synthetic access constructorJason Zaugg2013-07-281-2/+11
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Java synthesizes public constructors in private classes to allow access from inner classes. The signature of that synthetic constructor (known as a "access constructor") has a dummy parameter appended to avoid overloading clashes. javac chooses the type "Enclosing$1" for the dummy parameter (called the "access constructor tag") which is either an existing anonymous class or a synthesized class for this purpose. In OpenJDK, this transformation is performed in: langtools/src/share/classes/com/sun/tools/javac/comp/Lower.java (Incidentally, scalac would just emits a byte-code public constructor in this situation, rather than a private constructor / access constructor pair.) Scala parses the signature of the access contructor, and drops the $outer parameter, but retains the dummy parameter. This causes havoc when it tries to parse the bytecode for that anonymous class; the class file parser doesn't have the enclosing type parameters of Vector in scope and crash ensues. In any case, we shouldn't allow user code to see that constructor; it should only be called from within its own compilation unit. This commit drops the dummy parameter from access constructor signatures in class file parsing.
| * | | | Merge pull request #2738 from retronym/ticket/7636Grzegorz Kossakowski2013-07-271-0/+2
| |\ \ \ \ | | | | | | | | | | | | SI-7636 Fix a NPE in typing class constructors
| | * | | | SI-7636 Fix a NPE in typing class constructorsChristopher Vogt2013-07-161-0/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | If we encountered an erroneous super call due to a failure in parent type argument inference, we must avoid inspecting the untyped children of erroneous trees.
| * | | | | Merge pull request #2762 from gourlaysama/t7687Grzegorz Kossakowski2013-07-271-1/+1
| |\ \ \ \ \ | | | | | | | | | | | | | | SI-7687 Handle spaces in %COMSPEC% path in scala.bat.
| | * | | | | SI-7687 Handle spaces in %COMSPEC% path in scala.bat.Antoine Gourlay2013-07-231-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Double quoted %COMSPEC% to allow for spaces in the path to the default interpreter (cmd.exe or equivalent).
| * | | | | | [backport] SI-7569 Fix end position in PostfixSelect treeFrançois Garillot2013-07-241-1/+1
| |/ / / / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | introduced in 5b54681: the end position of Postfix operators should take the operator length into account. review by @som-snytt
| * / / / / SI-7657 clarifies the "macro overrides method" ruleEugene Burmako2013-07-141-2/+2
| |/ / / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Currently we allow macros to override non-abstract methods (in order to provide performance enhancements such as foreach for collections), and we also disallow macros to override abstract methods (otherwise downcasting might lead to AbstractMethodErrors). This patch fixes an oversight in the disallowing rule that prohibited macros from overriding a concrete method if that concrete method itself overrides an abstract method. RefCheck entertains all overriding pairs, not only the immediate ones, so the disallowing rule was triggered. Now macros can override abstract methods if and only if either the base type or the self type contain a matching non-abstract method.
| * | | | Merge pull request #2721 from retronym/ticket/7649Adriaan Moors2013-07-121-8/+8
| |\ \ \ \ | | | | | | | | | | | | SI-7649 Fix positions for reshaped tag materializers
| | * | | | SI-7649 Fix positions for reshaped tag materializersJason Zaugg2013-07-111-8/+8
| | |/ / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Calls to `materializeClassTag[T]` are replaced during reification with `implicitly[ClassTag[T]]` in the `reify` macro. This is done to avoid referring to symbols in scala-compiler.jar. Class- and Type-Tag materialization is treated in the same way. This commit positions the replacement trees to avoid triggering assertions under -Yrangepos.
| * | | | Merge pull request #2689 from scalamacros/ticket/7617Adriaan Moors2013-07-121-3/+6
| |\ \ \ \ | | | | | | | | | | | | SI-7617 typedAssign no longer expands lhs
| | * | | | SI-7617 typedAssign no longer expands lhsEugene Burmako2013-07-091-1/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This makes sure that setter and updateDynamic macros work as intended rather than in some cases expanding incorrectly or prematurely. Setter invocations are desugared from assignments of values to getters. If a typecheck of an assignment's lhs yields an invocation of a getter, then the assignment is rewritten into an invocation of a setter. However if a getter is a macro, then it just expands, destroying the prerequisite for desugaring. Therefore we need to disable expansion for the typecheck of an lhs. Similar thing happens to updateDynamic that first desugars a getter invocation into q"$target.updateDynamic($fieldName)" and then expects typedAssign to rewrite the corresponding Assign node into an additional application of a partially applied updateDynamic to a rhs. Here we also need to disable the typecheck of an lhs, because macros cannot be partially applied.
| | * | | | makes it more convenient to work with SuppressMacroExpansionAttachmentEugene Burmako2013-06-281-2/+2
| | | | | |
| * | | | | SI-7638 Superaccessor lookup after specializationVlad Ureche2013-07-081-1/+1
| | |/ / / | |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The crash was caused by a symbol lookup to rewire the super calls, done after pickler, but specialization added new traits and new members, thus making the super rewiring impossible. To avoid such problems, this patch moves symbol lookup after specialization, so the changes done by specialization (and miniboxing) become visible to mixin. NOTE: This patch will be followed by a similar patch to master. Review by @adriaanm or @retronym.
* | | | | Merge pull request #2739 from retronym/ticket/7668Adriaan Moors2013-07-291-0/+3
|\ \ \ \ \ | | | | | | | | | | | | SI-7668 Better return type inheritance for dep. method types
| * | | | | SI-7668 Better return type inheritance for dep. method typesJason Zaugg2013-07-161-0/+3
| | |_|/ / | |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Return type inheritance already handles substitution of type parameters of the overriding method for those of the overriding. This commit extends this to do the same for parameter symbols.