diff options
Diffstat (limited to 'src/compiler/scala/reflect/runtime/SymbolTable.scala')
-rw-r--r-- | src/compiler/scala/reflect/runtime/SymbolTable.scala | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/src/compiler/scala/reflect/runtime/SymbolTable.scala b/src/compiler/scala/reflect/runtime/SymbolTable.scala index 9e560e0d20..eb4026f7ef 100644 --- a/src/compiler/scala/reflect/runtime/SymbolTable.scala +++ b/src/compiler/scala/reflect/runtime/SymbolTable.scala @@ -6,4 +6,21 @@ package runtime * It can be used either from the reflexive mirror itself (class Universe), or else from * a runtime compiler that uses reflection to get a class information (class scala.tools.nsc.ReflectGlobal) */ -trait SymbolTable extends internal.SymbolTable with JavaToScala with ScalaToJava with Loaders +trait SymbolTable extends internal.SymbolTable with JavaToScala with ScalaToJava with Loaders { + + /** If `owner` is a package class and `name` is a term name, make a new package + * <owner>.<name>, otherwise return NoSymbol + */ + override def missingHook(owner: Symbol, name: Name): Symbol = + if (name.isTermName && owner.hasPackageFlag) + makeScalaPackage(if (owner.isRoot) name.toString else owner.fullName+"."+name).sourceModule + else { + println(name+"/"+name.isTermName+"/"+owner+"/"+owner.hasPackageFlag+"/"+owner.info.decls.getClass) + super.missingHook(owner, name) + } + + /** Assert that packages have package scopes */ + override def validateClassInfo(tp: ClassInfoType) { + assert(!tp.typeSymbol.isPackageClass || tp.decls.isInstanceOf[PackageScope]) + } +} |