Skip to content

Commit d28a129

Browse files
authored
Merge pull request scala#8066 from retronym/topic/scalap-constant
Fix scalap parsing/printing of enum and class constant types
2 parents ae27fe9 + 0b28d2f commit d28a129

File tree

4 files changed

+38
-1
lines changed

4 files changed

+38
-1
lines changed

src/scalap/scala/tools/scalap/scalax/rules/scalasig/ScalaSig.scala

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -246,7 +246,9 @@ object ScalaSigEntryParsers extends RulesWithState with MemoisableRules {
246246
32 -~ longValue ^^ (java.lang.Double.longBitsToDouble),
247247
33 -~ nameRef,
248248
34 -^ null,
249-
35 -~ typeRef)
249+
35 -~ typeRef,
250+
36 -~ symbolRef
251+
)
250252

251253
lazy val attributeInfo = 40 -~ symbolRef ~ typeRef ~ (constantRef?) ~ (nameRef ~ constantRef *) ^~~~^ AttributeInfo // sym_Ref info_Ref {constant_Ref} {nameRef constantRef}
252254
lazy val children = 41 -~ (nat*) ^^ Children //sym_Ref {sym_Ref}

src/scalap/scala/tools/scalap/scalax/rules/scalasig/ScalaSigPrinter.scala

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -342,6 +342,8 @@ class ScalaSigPrinter(stream: PrintStream, printPrivates: Boolean) {
342342
case _: Double => "scala.Double"
343343
case _: String => "java.lang.String"
344344
case c: Class[_] => "java.lang.Class[" + c.getComponentType.getCanonicalName.replace("$", ".") + "]"
345+
case e: ExternalSymbol => e.parent.get.path
346+
case tp: Type => "java.lang.Class[" + toString(tp, sep) + "]"
345347
})
346348
case TypeRefType(prefix, symbol, typeArgs) => sep + (symbol.path match {
347349
case "scala.<repeated>" => flags match {

test/files/scalap/constants.check

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
class Constants extends scala.AnyRef {
2+
def this() = { /* compiled code */ }
3+
final val UnitConstant: scala.Unit = { /* compiled code */ }
4+
final val ByteConstant: scala.Boolean = { /* compiled code */ }
5+
final val CharConstant: scala.Char = { /* compiled code */ }
6+
final val ShortConstant: scala.Short = { /* compiled code */ }
7+
final val IntConstant: scala.Int = { /* compiled code */ }
8+
final val LongConstant: scala.Long = { /* compiled code */ }
9+
final val FloatConstant: scala.Float = { /* compiled code */ }
10+
final val DoubleConstant: scala.Double = { /* compiled code */ }
11+
final val NullConstant: scala.Null = { /* compiled code */ }
12+
final val ClassConstant: java.lang.Class[scala.Predef.String] = { /* compiled code */ }
13+
final val ClassConstant2: java.lang.Class[scala.Some[_]] = { /* compiled code */ }
14+
final val EnumConstant: java.util.concurrent.TimeUnit = { /* compiled code */ }
15+
final val StringConstant: java.lang.Class[scala.Predef.String] = { /* compiled code */ }
16+
}

test/files/scalap/constants.scala

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
class Constants {
2+
final val UnitConstant = ()
3+
final val ByteConstant = false
4+
final val CharConstant = 'a'
5+
final val ShortConstant = 1.toShort
6+
final val IntConstant = 1
7+
final val LongConstant = 1L
8+
final val FloatConstant = 1f
9+
final val DoubleConstant = 1d
10+
11+
final val NullConstant = null
12+
13+
final val ClassConstant = classOf[String]
14+
final val ClassConstant2 = classOf[Some[_]]
15+
final val EnumConstant = java.util.concurrent.TimeUnit.DAYS
16+
final val StringConstant = classOf[String]
17+
}

0 commit comments

Comments
 (0)