summaryrefslogtreecommitdiff
path: root/src/compiler/scala/tools/nsc/ast/parser/Parsers.scala
diff options
context:
space:
mode:
authormihaylov <mihaylov@epfl.ch>2006-07-12 10:11:39 +0000
committermihaylov <mihaylov@epfl.ch>2006-07-12 10:11:39 +0000
commitac87e36fddc684ce42e574063e0ead2ee029edb6 (patch)
tree93d5b629aedcba1edbaefab211203975b170be4c /src/compiler/scala/tools/nsc/ast/parser/Parsers.scala
parentad9ac5a2962262f8161b102e81fcfaddea14d1c1 (diff)
downloadscala-ac87e36fddc684ce42e574063e0ead2ee029edb6.tar.gz
scala-ac87e36fddc684ce42e574063e0ead2ee029edb6.tar.bz2
scala-ac87e36fddc684ce42e574063e0ead2ee029edb6.zip
- Made attributes applicable to parameters
- Keep attributes in class Modifiers - Emit the appropriate information for Java annotations applied to parameters
Diffstat (limited to 'src/compiler/scala/tools/nsc/ast/parser/Parsers.scala')
-rw-r--r--src/compiler/scala/tools/nsc/ast/parser/Parsers.scala26
1 files changed, 17 insertions, 9 deletions
diff --git a/src/compiler/scala/tools/nsc/ast/parser/Parsers.scala b/src/compiler/scala/tools/nsc/ast/parser/Parsers.scala
index 684e6869d9..6fe085a54e 100644
--- a/src/compiler/scala/tools/nsc/ast/parser/Parsers.scala
+++ b/src/compiler/scala/tools/nsc/ast/parser/Parsers.scala
@@ -1208,6 +1208,7 @@ trait Parsers requires SyntaxAnalyzer {
var caseParam = ofCaseClass
def param(): ValDef = {
atPos(in.currentPos) {
+ val attrs = attributeClauses();
var mods = Modifiers(Flags.PARAM);
if (owner.isTypeName) {
mods = modifiers() | Flags.PARAMACCESSOR;
@@ -1233,7 +1234,7 @@ trait Parsers requires SyntaxAnalyzer {
" parameters may not be call-by-name", false)
Flags.BYNAMEPARAM
} else 0;
- ValDef(mods | implicitmod | bynamemod, name, paramType(), EmptyTree)
+ ValDef((mods | implicitmod | bynamemod) setAttr attrs, name, paramType(), EmptyTree)
}
}
def paramClause(): List[ValDef] = {
@@ -1638,7 +1639,7 @@ trait Parsers requires SyntaxAnalyzer {
/** ObjectDef ::= Id ClassTemplate
*/
- def objectDef(mods: Modifiers): Tree =
+ def objectDef(mods: Modifiers): ModuleDef =
atPos(in.skipToken()) {
val name = ident();
val template = classTemplate(mods, name, List());
@@ -1786,8 +1787,8 @@ trait Parsers requires SyntaxAnalyzer {
/** AttributeClauses ::= {AttributeClause}
* AttributeClause ::= `[' Attribute {`,' Attribute} `]' [NewLine]
*/
- def attributeClauses(): List[Tree] = {
- var attrs = new ListBuffer[Tree]
+ def attributeClauses(): List[Attribute] = {
+ var attrs = new ListBuffer[Attribute]
while (in.token == LBRACKET) {
in.nextToken()
attrs += attribute()
@@ -1803,7 +1804,7 @@ trait Parsers requires SyntaxAnalyzer {
/** Attribute ::= StableId [TypeArgs] [`(' [Exprs] `)']
*/
- def attribute(): Tree = {
+ def attribute(): Attribute = {
def nameValuePair(): Tree = {
accept(VAL)
var pos = in.currentPos
@@ -1827,7 +1828,7 @@ trait Parsers requires SyntaxAnalyzer {
nvps.toList
} else List()
val constr = atPos(pos) { New(t, List(args)) }
- atPos(pos) { glob.Attribute(constr, nameValuePairs) }
+ glob.Attribute(constr, nameValuePairs) setPos pos
}
def mixinAttribute(attrs: List[Tree]) = {
@@ -1841,9 +1842,16 @@ trait Parsers requires SyntaxAnalyzer {
if (attrs exists isMixinAttribute) Flags.TRAIT else 0
}
- def joinAttributes(attrs: List[Tree], defs: List[Tree]): List[Tree] =
- defs map (defn =>
- (attrs :\ defn) ((attr, tree) => Attributed(attr, tree) setPos attr.pos));
+ def joinAttributes(attrs: List[Attribute], defs: List[Tree]): List[Tree] = {
+ def setAttr(defn: Tree): Unit = defn match {
+ case DocDef(_, def0) => setAttr(def0)
+ case m: MemberDef => m.mods setAttr attrs
+ case _ => ()
+ }
+ if (!attrs.isEmpty)
+ defs foreach setAttr
+ defs;
+ }
/** RefineStatSeq ::= RefineStat {StatementSeparator RefineStat}
* RefineStat ::= Dcl