From 768a4082a6090835afef34ee38c2c398da335b01 Mon Sep 17 00:00:00 2001 From: Paul Phillips Date: Wed, 14 Nov 2012 10:54:27 -0800 Subject: Fix for overly eager package object initialization. A subtle change in the order in which symbol attributes were inspected (now you know why I avoid vals in the compiler) led to a cycle during initialization for slick. I'm afraid I don't know how to reproduce the issue outside of slick and sbt, so I added some logging instead. After some challenges juggling general correctness and cycle avoidance, I resorted to improving and documenting the logic as well. I predict reviewer will be pleased. --- src/reflect/scala/reflect/internal/Symbols.scala | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'src/reflect') diff --git a/src/reflect/scala/reflect/internal/Symbols.scala b/src/reflect/scala/reflect/internal/Symbols.scala index 30e5ecd643..b975ea5786 100644 --- a/src/reflect/scala/reflect/internal/Symbols.scala +++ b/src/reflect/scala/reflect/internal/Symbols.scala @@ -2463,6 +2463,14 @@ trait Symbols extends api.Symbols { self: SymbolTable => override def isMethod = this hasFlag METHOD override def isModule = this hasFlag MODULE override def isOverloaded = this hasFlag OVERLOADED + /*** !!! TODO: shouldn't we do something like the following: + override def isOverloaded = ( + if (this.isInitialized) + this hasFlag OVERLOADED + else + (infos ne null) && infos.info.isInstanceOf[OverloadedType] + ) + ***/ override def isPackage = this hasFlag PACKAGE override def isValueParameter = this hasFlag PARAM -- cgit v1.2.3