summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2009-07-16 15:43:02 +0000
committerMartin Odersky <odersky@gmail.com>2009-07-16 15:43:02 +0000
commit58bc0b3a53e6172bd9daf3701afb94b327c393c6 (patch)
tree844c3c6718825a3d7dcfaf5e75cb8716c118c624
parent467cfb2fc66789b416fbc492ec8844272d6348a7 (diff)
downloadscala-58bc0b3a53e6172bd9daf3701afb94b327c393c6.tar.gz
scala-58bc0b3a53e6172bd9daf3701afb94b327c393c6.tar.bz2
scala-58bc0b3a53e6172bd9daf3701afb94b327c393c6.zip
small improvements concerning positions and com...
small improvements concerning positions and completions
-rw-r--r--src/compiler/scala/tools/nsc/ast/TreePrinters.scala2
-rwxr-xr-xsrc/compiler/scala/tools/nsc/ast/parser/Parsers.scala17
-rw-r--r--src/compiler/scala/tools/nsc/ast/parser/TreeBuilder.scala2
-rwxr-xr-xsrc/compiler/scala/tools/nsc/interactive/Global.scala14
4 files changed, 25 insertions, 10 deletions
diff --git a/src/compiler/scala/tools/nsc/ast/TreePrinters.scala b/src/compiler/scala/tools/nsc/ast/TreePrinters.scala
index df19bdcf4b..120658b4e6 100644
--- a/src/compiler/scala/tools/nsc/ast/TreePrinters.scala
+++ b/src/compiler/scala/tools/nsc/ast/TreePrinters.scala
@@ -74,9 +74,11 @@ abstract class TreePrinters {
def printParam(tree: Tree) {
tree match {
case ValDef(mods, name, tp, rhs) =>
+ if (settings.Xprintpos.value) print(tree.pos.show)
printAnnotations(tree)
print(symName(tree, name)); printOpt(": ", tp); printOpt(" = ", rhs)
case TypeDef(mods, name, tparams, rhs) =>
+ if (settings.Xprintpos.value) print(tree.pos.show)
print(symName(tree, name))
printTypeParams(tparams); print(rhs)
}
diff --git a/src/compiler/scala/tools/nsc/ast/parser/Parsers.scala b/src/compiler/scala/tools/nsc/ast/parser/Parsers.scala
index abb9f5214c..55aa4acf7d 100755
--- a/src/compiler/scala/tools/nsc/ast/parser/Parsers.scala
+++ b/src/compiler/scala/tools/nsc/ast/parser/Parsers.scala
@@ -298,15 +298,16 @@ self =>
syntaxError(in.offset, msg, skipIt)
}
+ def expectedMsg(token: Int): String =
+ token2string(token) + " expected but " +token2string(in.token) + " found."
+
/** Consume one token of the specified type, or
* signal an error if it is not there.
*/
def accept(token: Int): Int = {
val offset = in.offset
if (in.token != token) {
- val msg =
- token2string(token) + " expected but " +token2string(in.token) + " found."
- syntaxErrorOrIncomplete(msg, true)
+ syntaxErrorOrIncomplete(expectedMsg(token), false)
if ((token == RPAREN || token == RBRACE || token == RBRACKET))
if (in.parenBalance(token) + assumedClosingParens(token) < 0)
assumedClosingParens(token) += 1
@@ -543,20 +544,22 @@ self =>
/* -------- IDENTIFIERS AND LITERALS ------------------------------------------- */
- def ident(): Name =
+ def ident(skipIt: Boolean): Name =
if (in.token == IDENTIFIER || in.token == BACKQUOTED_IDENT) {
val name = in.name.encode
in.nextToken()
name
} else {
- accept(IDENTIFIER)
+ syntaxErrorOrIncomplete(expectedMsg(IDENTIFIER), skipIt)
nme.ERROR
}
+ def ident(): Name = ident(true)
+
def selector(t: Tree): Tree = {
val point = in.offset
//assert(t.pos.isDefined, t)
- Select(t, ident()) setPos r2p(t.pos.start, point, in.lastOffset)
+ Select(t, ident(false)) setPos r2p(t.pos.start, point, in.lastOffset)
}
/** Path ::= StableId
@@ -848,7 +851,7 @@ self =>
if (in.token == HASH) {
val hashOffset = in.skipToken()
val nameOffset = in.offset
- val name = ident()
+ val name = ident(false)
val sel = atPos(t.pos.start, if (name == nme.ERROR) hashOffset else nameOffset) {
SelectFromTypeTree(t, name.toTypeName)
}
diff --git a/src/compiler/scala/tools/nsc/ast/parser/TreeBuilder.scala b/src/compiler/scala/tools/nsc/ast/parser/TreeBuilder.scala
index b3e73333c6..ca51c9aa5c 100644
--- a/src/compiler/scala/tools/nsc/ast/parser/TreeBuilder.scala
+++ b/src/compiler/scala/tools/nsc/ast/parser/TreeBuilder.scala
@@ -354,7 +354,7 @@ abstract class TreeBuilder {
makeFor(mapName, flatMapName, rest, body))
case ValFrom(pos, pat, rhs) :: Filter(_, test) :: rest =>
makeFor(mapName, flatMapName,
- ValFrom(pos, pat, makeCombination(r2p(rhs.pos.start, pos.point, test.pos.end), nme.filter, rhs, pat.syntheticDuplicate, test)) :: rest,
+ ValFrom(pos, pat, makeCombination(rhs.pos union test.pos, nme.filter, rhs, pat.syntheticDuplicate, test)) :: rest,
body)
case ValFrom(pos, pat, rhs) :: rest =>
val valeqs = rest.take(definitions.MaxTupleArity - 1).takeWhile(_.isInstanceOf[ValEq]);
diff --git a/src/compiler/scala/tools/nsc/interactive/Global.scala b/src/compiler/scala/tools/nsc/interactive/Global.scala
index 72415b5d7b..93057c29ec 100755
--- a/src/compiler/scala/tools/nsc/interactive/Global.scala
+++ b/src/compiler/scala/tools/nsc/interactive/Global.scala
@@ -144,7 +144,7 @@ self =>
treePrinters.create(pw).print(tree)
pw.flush
- val typed = new SyncVar[Either[Tree, Throwable]]
+ val typed = new Response[Tree]
askTypeAt(pos, typed)
val typ = typed.get.left.toOption match {
case Some(tree) =>
@@ -156,7 +156,16 @@ self =>
case None => "<None>"
}
- source.content.view.drop(start).take(length).mkString+" : "+source.path+" ("+start+", "+end+")\n\nlocateTree:\n"+sw.toString+"\n\naskTypeAt:\n"+typ
+ val completionResponse = new Response[List[Member]]
+ askCompletion(pos, completionResponse)
+ val completion = completionResponse.get.left.toOption match {
+ case Some(members) =>
+ members mkString "\n"
+ case None => "<None>"
+ }
+
+ source.content.view.drop(start).take(length).mkString+" : "+source.path+" ("+start+", "+end+
+ ")\n\nlocateTree:\n"+sw.toString+"\n\naskTypeAt:\n"+typ+"\n\ncompletion:\n"+completion
}
// ----------------- The Background Runner Thread -----------------------
@@ -325,6 +334,7 @@ self =>
s.tree.symbol
)}
}
+ println("completion at "+tree+" "+tree.tpe)
val decls = tree.tpe.decls.toList map (member(_, false))
val inherited = tree.tpe.members.toList diff decls map (member(_, true))
val implicits = applicableViews(tree, context) flatMap implicitMembers