From 0a8c17efca37e14b8467d7da9ffd6c48c8cd1c0f Mon Sep 17 00:00:00 2001 From: Martin Odersky Date: Mon, 20 Jan 2014 10:51:56 +0100 Subject: Avoid eager forcing in enterArgBinding Caused a cyclic reference error when compiling the three files in test "testNonCyclic". --- src/dotty/tools/dotc/core/TypeOps.scala | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'src/dotty/tools/dotc/core/TypeOps.scala') diff --git a/src/dotty/tools/dotc/core/TypeOps.scala b/src/dotty/tools/dotc/core/TypeOps.scala index 0411cc613..f3ddf3cc1 100644 --- a/src/dotty/tools/dotc/core/TypeOps.scala +++ b/src/dotty/tools/dotc/core/TypeOps.scala @@ -2,6 +2,7 @@ package dotty.tools.dotc package core import Contexts._, Types._, Symbols._, Names._, Flags._, Scopes._ +import SymDenotations._ import util.SimpleMap trait TypeOps { this: Context => @@ -86,8 +87,14 @@ trait TypeOps { this: Context => } private def enterArgBinding(formal: Symbol, info: Type, cls: ClassSymbol, decls: Scope) = { + val lazyInfo = new LazyType { // needed so we do not force `formal`. + def complete(denot: SymDenotation): Unit = { + denot setFlag formal.flags & RetainedTypeArgFlags + denot.info = info + } + } val typeArgFlag = if (formal is Local) TypeArgument else EmptyFlags - val sym = ctx.newSymbol(cls, formal.name, formal.flags & RetainedTypeArgFlags | typeArgFlag, info) + val sym = ctx.newSymbol(cls, formal.name, formal.flagsUNSAFE & RetainedTypeArgFlags | typeArgFlag, lazyInfo) cls.enter(sym, decls) } -- cgit v1.2.3