diff options
author | Lex Spoon <lex@lexspoon.org> | 2007-05-23 09:52:42 +0000 |
---|---|---|
committer | Lex Spoon <lex@lexspoon.org> | 2007-05-23 09:52:42 +0000 |
commit | f6eb33a2166d2df55ce65881b01e928bbbbcd324 (patch) | |
tree | 1f25c4cae9094c7e134d75be7658f987a8eb4d5c | |
parent | fcbd0bfa8b23aafbac517c7cf274048404de2b69 (diff) | |
download | scala-f6eb33a2166d2df55ce65881b01e928bbbbcd324.tar.gz scala-f6eb33a2166d2df55ce65881b01e928bbbbcd324.tar.bz2 scala-f6eb33a2166d2df55ce65881b01e928bbbbcd324.zip |
fixed a type error in the pickling of annotatio...
fixed a type error in the pickling of annotation arguments
-rw-r--r-- | src/compiler/scala/tools/nsc/symtab/classfile/Pickler.scala | 25 |
1 files changed, 12 insertions, 13 deletions
diff --git a/src/compiler/scala/tools/nsc/symtab/classfile/Pickler.scala b/src/compiler/scala/tools/nsc/symtab/classfile/Pickler.scala index c499679961..259f4726b2 100644 --- a/src/compiler/scala/tools/nsc/symtab/classfile/Pickler.scala +++ b/src/compiler/scala/tools/nsc/symtab/classfile/Pickler.scala @@ -272,27 +272,26 @@ abstract class Pickler extends SubComponent { children foreach putSymbol } - private def putAnnotation(sym: Symbol, attr: AnnotationInfo): unit = { - assert(putEntry((sym, attr))) - putType(attr.atp) - for (c <- attr.args) putTreeOrConstant(c) - for ((name, c) <- attr.assocs) { putEntry(name); putTreeOrConstant(c) } + private def putAnnotation(sym: Symbol, annot: AnnotationInfo): unit = { + assert(putEntry((sym, annot))) + val AnnotationInfo(atp, args, assocs) = annot + putType(atp) + args foreach putAnnotationArg + for ((name, c) <- assocs) { putEntry(name); putAnnotationArg(c) } } private def putAnnotation(annot: AnnotationInfo): unit = if(putEntry(annot)) { val AnnotationInfo(tpe, args, assocs) = annot putType(tpe) - args foreach putTreeOrConstant - for ((name, rhs) <- assocs) { putEntry(name); putTreeOrConstant(rhs) } + args foreach putAnnotationArg + for ((name, rhs) <- assocs) { putEntry(name); putAnnotationArg(rhs) } } - private def putTreeOrConstant(x: AnyRef) { - x match { - case c:Constant => putConstant(c) - case tree:reflect.Tree => putTree(tree) - case _ => - throw new FatalError("attribute neither tree nor constant: " + x) + private def putAnnotationArg(arg: AnnotationArgument) { + arg.constant match { + case Some(c) => putConstant(c) + case _ => putTree(arg.tree) } } |