diff options
author | Paul Phillips <paulp@improving.org> | 2012-05-04 17:44:28 -0700 |
---|---|---|
committer | Paul Phillips <paulp@improving.org> | 2012-05-04 18:24:16 -0700 |
commit | 0fb12fa0620c5f9999e309a4de7831549b283c24 (patch) | |
tree | 94a01f56b6ea8ed2dd2fdba0a8f9105e67f9d290 /test/files/neg/t800.check | |
parent | ecbf89552666ebba974188ef3c98b5f4855d0cea (diff) | |
download | scala-0fb12fa0620c5f9999e309a4de7831549b283c24.tar.gz scala-0fb12fa0620c5f9999e309a4de7831549b283c24.tar.bz2 scala-0fb12fa0620c5f9999e309a4de7831549b283c24.zip |
Updated Symbol to record classfile origin.
This change should be transparent to anything using sourceFile,
unless it was drinking from the inheritance well too deeply. Rather
than squander the already allocated field for every ClassSymbol not
being compiled from source, I'm now populating it with the file
representing the class. This will make a broad range of things easier,
like debugging, issuing useful error messages, symbol invalidation,
signature verification, you name it.
def sourceFile - still returns only source code files
def binaryFile - returns only class files
def associatedFile - returns whatever is there, if anything
Performance: I may be mistaken, but I believe this is a zero-impact
change. No new fields are allocated; fields which were null now hold
a useful reference. The reference is to a file instance which was
already being allocated and already long-lived.
Compare error messages:
// Version 1
% scalac a.scala
error: type _$1 is defined twice
// Version 2
% scalac a.scala
error: type _$1 is defined twice
conflicting symbols both originated in file './foo/package.class'
Note: this may be due to a bug in the compiler involving wildcards in package objects
one error found
Bonus for people who read commit logs. Try this in the repl
after starting power mode.
ListClass.info.members groupBy (_.associatedFile) foreach {
case (k, vs) => println("%s\n %s\n".format(k, vs map (_.defString) mkString "\n "))
}
Diffstat (limited to 'test/files/neg/t800.check')
-rw-r--r-- | test/files/neg/t800.check | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/test/files/neg/t800.check b/test/files/neg/t800.check index 44c316a95b..8ba95fddde 100644 --- a/test/files/neg/t800.check +++ b/test/files/neg/t800.check @@ -1,13 +1,16 @@ t800.scala:4: error: qualification is already defined as value qualification val qualification = false; ^ -t800.scala:8: error: method qualification is defined twice in t800.scala +t800.scala:8: error: method qualification is defined twice + conflicting symbols both originated in file 't800.scala' val qualification = false; ^ -t800.scala:12: error: value qualification is defined twice in t800.scala +t800.scala:12: error: value qualification is defined twice + conflicting symbols both originated in file 't800.scala' var qualification = false; ^ -t800.scala:16: error: method qualification is defined twice in t800.scala +t800.scala:16: error: method qualification is defined twice + conflicting symbols both originated in file 't800.scala' var qualification = false; ^ four errors found |