summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLi Haoyi <haoyi@dropbox.com>2014-11-28 06:19:55 -0800
committerLi Haoyi <haoyi@dropbox.com>2014-11-28 06:19:55 -0800
commit9270f9ada72fa36ebe2b6907b2e8f330cc7e7996 (patch)
treedc2c7cab07c0ffe48fd65ce5eb110d92b1ee568c
parent097b5f24938bfb59471da7415be6523a7dfa03f9 (diff)
downloadhands-on-scala-js-9270f9ada72fa36ebe2b6907b2e8f330cc7e7996.tar.gz
hands-on-scala-js-9270f9ada72fa36ebe2b6907b2e8f330cc7e7996.tar.bz2
hands-on-scala-js-9270f9ada72fa36ebe2b6907b2e8f330cc7e7996.zip
Raw structural type syntax works
-rw-r--r--scalaParser/src/main/scala/scalaParser/ScalaSyntax.scala7
-rw-r--r--scalaParser/src/test/resources/test.scala13
-rw-r--r--scalaParser/src/test/scala/scalaParser/SyntaxTest.scala27
3 files changed, 35 insertions, 12 deletions
diff --git a/scalaParser/src/main/scala/scalaParser/ScalaSyntax.scala b/scalaParser/src/main/scala/scalaParser/ScalaSyntax.scala
index 7770bca..f99e016 100644
--- a/scalaParser/src/main/scala/scalaParser/ScalaSyntax.scala
+++ b/scalaParser/src/main/scala/scalaParser/ScalaSyntax.scala
@@ -108,7 +108,8 @@ class ScalaSyntax(val input: ParserInput) extends Parser with Basic with Identif
OneNewlineMax ~ '{' ~ oneOrMore(RefineStat).separatedBy(Semi) ~ "}"
}
rule {
- oneOrMore(AnnotType).separatedBy(K.W("with")) ~ optional(Refinement)
+ oneOrMore(AnnotType).separatedBy(K.W("with")) ~ optional(Refinement) |
+ Refinement
}
}
def AnnotType = rule {
@@ -304,7 +305,7 @@ class ScalaSyntax(val input: ParserInput) extends Parser with Basic with Identif
def TypeParamClause: R0 = {
- def VariantTypeParam: R0 = rule { zeroOrMore(Annotation) ~ optional(anyOf("+-")) ~ TypeParam }
+ def VariantTypeParam: R0 = rule { zeroOrMore(Annotation) ~ optional(WL ~ anyOf("+-")) ~ TypeParam }
rule { '[' ~ oneOrMore(VariantTypeParam).separatedBy(',') ~ ']' }
}
def FunTypeParamClause: R0 = rule {
@@ -356,7 +357,7 @@ class ScalaSyntax(val input: ParserInput) extends Parser with Basic with Identif
def TemplateStat: R0 = rule {
Import |
zeroOrMore(Annotation ~ OneNewlineMax) ~ zeroOrMore(Modifier) ~ (Def | Dcl) |
- Expr
+ Expr0(true)
}
def SelfType: R0 = rule { K.W("this") ~ K.O(":") ~ Type ~ K.O("=>") | Id ~ optional(K.O(":") ~ Type) ~ K.O("=>") }
diff --git a/scalaParser/src/test/resources/test.scala b/scalaParser/src/test/resources/test.scala
index 32bac45..69f1f1a 100644
--- a/scalaParser/src/test/resources/test.scala
+++ b/scalaParser/src/test/resources/test.scala
@@ -1,10 +1,5 @@
-object K{
-
- def newBuilder =
- new B
-
- @inline def a = 1
-
-
-}
+object L{
+ a.b = c
+ a().b = c
+} \ No newline at end of file
diff --git a/scalaParser/src/test/scala/scalaParser/SyntaxTest.scala b/scalaParser/src/test/scala/scalaParser/SyntaxTest.scala
index 997d8e0..abb17fe 100644
--- a/scalaParser/src/test/scala/scalaParser/SyntaxTest.scala
+++ b/scalaParser/src/test/scala/scalaParser/SyntaxTest.scala
@@ -568,6 +568,33 @@ object SyntaxTest extends TestSuite{
|}
""".stripMargin
)
+ * - check(
+ """trait Function12[-T1, +R]
+ """.stripMargin
+ )
+ * - check(
+ """@a // Don't do this at home!
+ |trait B
+ """.stripMargin
+ )
+ * - check(
+ """object T{
+ | type B = { def F: S }
+ |}
+ |
+ """.stripMargin
+ )
+ * - check(
+ """
+ |object ScalaJSBuild{
+ | (
+ | 1 / 2
+ | / 3
+ | )
+ |}
+ |
+ """.stripMargin
+ )
}
'neg{
* - checkNeg(