[#84] | project: compiler | priority: medium | category: bug | |
---|---|---|---|---|
submitter | assigned to | status | date submitted | |
Philippe | Martin | fixed | 2003-08-12 12:19:30.0 | |
subject | missing subst in lambdalift | |||
code |
trait Foo[a]; object Bar { def f[b]: Int = { def g(x:b): Foo[b] = g(x); 0 } } |
|||
what happened | scalarun -uniqid -types -nopredefs tmp/bug_interpreter.scala -print:lambda The command above prints the following tree (I removed unrelevant information) abstract class Foo#13[a#14 ...]() extends scala.Object(); final class Bar#19() extends scala.Object() { final def f#20[b$0#21 ...](): scala.Int = 0; def g$0#23[b$0#24 ...](x#25: b$0#24): Foo[b$0#24] = g$0#23{[b$0#24](b$0#21)Foo#13[b$0#21]}[b$0#24](x#25){Foo#13[b$0#24]} }; The reference to g$0 in the rhs of g$0 has type [b$0#24](b$0#21)Foo#13[b$0#21]. |
|||
what expected | The type of g$0 should be [b$0#24](b$0#24)Foo#13[b$0#24]. The problem is that when lambdlift in method LambdaList.liftSymbol replaces fvs and ftvs by additional params and tparams, it does not perform a substitution from fvs/ftvs to params/tparams. | |||
[back to overview] |
Martin edited on 2003-08-13 15:01:28.0 |