diff options
author | Martin Odersky <odersky@gmail.com> | 2013-05-14 12:40:53 +0200 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2013-05-14 12:40:53 +0200 |
commit | 348dd53f384be31ec674814f9b9d97e89664b522 (patch) | |
tree | 2b8cc974b3422ee470df8a36cbe32126396d3182 /src/dotty/tools/dotc | |
parent | fec318dedaa10bf7ffaebd7aaf4a99e05ac0312a (diff) | |
download | dotty-348dd53f384be31ec674814f9b9d97e89664b522.tar.gz dotty-348dd53f384be31ec674814f9b9d97e89664b522.tar.bz2 dotty-348dd53f384be31ec674814f9b9d97e89664b522.zip |
Made precedence common between parsers and printers
Diffstat (limited to 'src/dotty/tools/dotc')
-rw-r--r-- | src/dotty/tools/dotc/parsing/Parsers.scala | 22 | ||||
-rw-r--r-- | src/dotty/tools/dotc/parsing/package.scala | 32 | ||||
-rw-r--r-- | src/dotty/tools/dotc/printing/Printers.scala | 17 |
3 files changed, 43 insertions, 28 deletions
diff --git a/src/dotty/tools/dotc/parsing/Parsers.scala b/src/dotty/tools/dotc/parsing/Parsers.scala index 0f2ba8531..d76553dd1 100644 --- a/src/dotty/tools/dotc/parsing/Parsers.scala +++ b/src/dotty/tools/dotc/parsing/Parsers.scala @@ -15,12 +15,11 @@ import Names._ import Trees._ import Decorators._ import StdNames._ -import util.Chars.isScalaLetter import util.Positions._ import Types._ import Constants._ import NameOps._ -import scala.reflect.internal.Chars._ +import util.Chars._ import ScriptParsers._ import annotation.switch @@ -339,25 +338,6 @@ object Parsers { var opStack: List[OpInfo] = Nil - def precedence(operator: Name): Int = - if (operator eq nme.ERROR) -1 - else { - val firstCh = operator(0) - if (isScalaLetter(firstCh)) 1 - else if (operator.isOpAssignmentName) 0 - else firstCh match { - case '|' => 2 - case '^' => 3 - case '&' => 4 - case '=' | '!' => 5 - case '<' | '>' => 6 - case ':' => 7 - case '+' | '-' => 8 - case '*' | '/' | '%' => 9 - case _ => 10 - } - } - def checkAssoc(offset: Int, op: Name, leftAssoc: Boolean) = if (TreeInfo.isLeftAssoc(op) != leftAssoc) syntaxError( diff --git a/src/dotty/tools/dotc/parsing/package.scala b/src/dotty/tools/dotc/parsing/package.scala new file mode 100644 index 000000000..b829bd313 --- /dev/null +++ b/src/dotty/tools/dotc/parsing/package.scala @@ -0,0 +1,32 @@ +package dotty.tools.dotc + +import util.Chars._ +import core.Names.Name +import core.StdNames.nme +import core.NameOps._ + +package object parsing { + + def precedence(operator: Name): Int = + if (operator eq nme.ERROR) -1 + else { + val firstCh = operator(0) + if (isScalaLetter(firstCh)) 1 + else if (operator.isOpAssignmentName) 0 + else firstCh match { + case '|' => 2 + case '^' => 3 + case '&' => 4 + case '=' | '!' => 5 + case '<' | '>' => 6 + case ':' => 7 + case '+' | '-' => 8 + case '*' | '/' | '%' => 9 + case _ => 10 + } + } + + def minPrec = 0 + def maxPrec = 10 + +}
\ No newline at end of file diff --git a/src/dotty/tools/dotc/printing/Printers.scala b/src/dotty/tools/dotc/printing/Printers.scala index 6a2f98250..59e89ee9d 100644 --- a/src/dotty/tools/dotc/printing/Printers.scala +++ b/src/dotty/tools/dotc/printing/Printers.scala @@ -7,6 +7,7 @@ import Constants._, Annotations._, StdNames._, Denotations._, SymDenotations._, import Texts._ import java.lang.Integer.toOctalString import scala.annotation.switch +import parsing.{precedence, minPrec, maxPrec} trait Printers { this: Context => @@ -23,12 +24,12 @@ object Printers { if (nested.value < value) "(" ~ text ~ ")" else text } - val DotPrec = new Precedence(4) - val AndPrec = new Precedence(3) - val OrPrec = new Precedence(2) - val WithPrec = new Precedence(1) - val LeftArrowPrec = new Precedence(1) - val GlobalPrec = new Precedence(0) + val DotPrec = new Precedence(maxPrec) + val AndPrec = new Precedence(precedence(nme.raw.AMP)) + val OrPrec = new Precedence(precedence(nme.raw.BAR)) + val WithPrec = new Precedence(precedence(nme.WITHkw)) + val LeftArrowPrec = WithPrec + val GlobalPrec = new Precedence(minPrec) abstract class Printer { @@ -494,7 +495,9 @@ object Printers { super.toText(tp, prec) } - override def toText[T >: Untyped](tree: Tree[T]): Text = super.toText(tree) + override def toText[T >: Untyped](tree: Tree[T]): Text = toText(tree, GlobalPrec) + + def toText[T >: Untyped](tree: Tree[T], prec: Precedence): Text = ??? override protected def polyParamName(name: TypeName): TypeName = name.unexpandedName() |