Skip to content

Commit bcccb2f

Browse files
authored
Merge pull request #5669 from dotty-staging/tasty-add-missing-constructors
Add missing tasty.reflect.Constant constructors
2 parents 89496e6 + 8a60c20 commit bcccb2f

File tree

2 files changed

+53
-0
lines changed

2 files changed

+53
-0
lines changed

compiler/src/dotty/tools/dotc/tastyreflect/ConstantOpsImpl.scala

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,84 +12,97 @@ trait ConstantOpsImpl extends scala.tasty.reflect.ConstantOps with CoreImpl {
1212
object Constant extends ConstantModule {
1313

1414
object Unit extends UnitModule {
15+
def apply(): Constant = Constants.Constant(())
1516
def unapply(x: Constant): Boolean = x.tag == Constants.UnitTag
1617
}
1718

1819
object Null extends NullModule {
20+
def apply(): Constant = Constants.Constant(null)
1921
def unapply(x: Constant): Boolean = x.tag == Constants.NullTag
2022
}
2123

2224
object Boolean extends BooleanModule {
25+
def apply(x: Boolean): Constant = Constants.Constant(x)
2326
def unapply(x: Constant): Option[Boolean] = x match {
2427
case x: Constants.Constant if x.tag == Constants.BooleanTag => Some(x.booleanValue)
2528
case _ => None
2629
}
2730
}
2831

2932
object Byte extends ByteModule {
33+
def apply(x: Byte): Constant = Constants.Constant(x)
3034
def unapply(x: Constant): Option[Byte] = x match {
3135
case x: Constants.Constant if x.tag == Constants.ByteTag => Some(x.byteValue)
3236
case _ => None
3337
}
3438
}
3539

3640
object Short extends ShortModule {
41+
def apply(x: Short): Constant = Constants.Constant(x)
3742
def unapply(x: Constant): Option[Short] = x match {
3843
case x: Constants.Constant if x.tag == Constants.ShortTag => Some(x.shortValue)
3944
case _ => None
4045
}
4146
}
4247

4348
object Char extends CharModule {
49+
def apply(x: Char): Constant = Constants.Constant(x)
4450
def unapply(x: Constant): Option[Char] = x match {
4551
case x: Constants.Constant if x.tag == Constants.CharTag => Some(x.charValue)
4652
case _ => None
4753
}
4854
}
4955

5056
object Int extends IntModule {
57+
def apply(x: Int): Constant = Constants.Constant(x)
5158
def unapply(x: Constant): Option[Int] = x match {
5259
case x: Constants.Constant if x.tag == Constants.IntTag => Some(x.intValue)
5360
case _ => None
5461
}
5562
}
5663

5764
object Long extends LongModule {
65+
def apply(x: Long): Constant = Constants.Constant(x)
5866
def unapply(x: Constant): Option[Long] = x match {
5967
case x: Constants.Constant if x.tag == Constants.LongTag => Some(x.longValue)
6068
case _ => None
6169
}
6270
}
6371

6472
object Float extends FloatModule {
73+
def apply(x: Float): Constant = Constants.Constant(x)
6574
def unapply(x: Constant): Option[Float] = x match {
6675
case x: Constants.Constant if x.tag == Constants.FloatTag => Some(x.floatValue)
6776
case _ => None
6877
}
6978
}
7079

7180
object Double extends DoubleModule {
81+
def apply(x: Double): Constant = Constants.Constant(x)
7282
def unapply(x: Constant): Option[Double] = x match {
7383
case x: Constants.Constant if x.tag == Constants.DoubleTag => Some(x.doubleValue)
7484
case _ => None
7585
}
7686
}
7787

7888
object String extends StringModule {
89+
def apply(x: String): Constant = Constants.Constant(x)
7990
def unapply(x: Constant): Option[String] = x match {
8091
case x: Constants.Constant if x.tag == Constants.StringTag => Some(x.stringValue)
8192
case _ => None
8293
}
8394
}
8495

8596
object ClassTag extends ClassTagModule {
97+
def apply[T](implicit x: scala.reflect.ClassTag[T]): Constant = Constants.Constant(x)
8698
def unapply(x: Constant): Option[Type] = x match {
8799
case x: Constants.Constant if x.tag == Constants.ClazzTag => Some(x.typeValue)
88100
case _ => None
89101
}
90102
}
91103

92104
object Symbol extends SymbolModule {
105+
def apply(x: scala.Symbol): Constant = Constants.Constant(x)
93106
def unapply(x: Constant): Option[scala.Symbol] = x match {
94107
case x: Constants.Constant if x.tag == Constants.ScalaSymbolTag => Some(x.scalaSymbolValue)
95108
case _ => None

library/src/scala/tasty/reflect/ConstantOps.scala

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,83 +15,119 @@ trait ConstantOps extends Core {
1515
/** Module of Null literals */
1616
val Unit: UnitModule
1717
abstract class UnitModule {
18+
/** Unit `()` literal */
19+
def apply(): Constant
20+
1821
/** Extractor for Unit literals */
1922
def unapply(constant: Constant): Boolean
2023
}
2124

2225
/** Module of Null literals */
2326
val Null: NullModule
2427
abstract class NullModule {
28+
/** `null` literal */
29+
def apply(): Constant
30+
2531
/** Extractor for Null literals */
2632
def unapply(constant: Constant): Boolean
2733
}
2834

2935
/** Module of Boolean literals */
3036
val Boolean: BooleanModule
3137
abstract class BooleanModule {
38+
/** Boolean literal */
39+
def apply(x: Boolean): Constant
40+
3241
/** Extractor for Boolean literals */
3342
def unapply(constant: Constant): Option[Boolean]
3443
}
3544

3645
/** Module of Byte literals */
3746
val Byte: ByteModule
3847
abstract class ByteModule {
48+
/** Byte literal */
49+
def apply(x: Byte): Constant
50+
3951
/** Extractor for Byte literals */
4052
def unapply(constant: Constant): Option[Byte]
4153
}
4254

4355
/** Module of Short literals */
4456
val Short: ShortModule
4557
abstract class ShortModule {
58+
/** Short literal */
59+
def apply(x: Short): Constant
60+
4661
/** Extractor for Short literals */
4762
def unapply(constant: Constant): Option[Short]
4863
}
4964

5065
/** Module of Char literals */
5166
val Char: CharModule
5267
abstract class CharModule {
68+
/** Char literal */
69+
def apply(x: Char): Constant
70+
5371
/** Extractor for Char literals */
5472
def unapply(constant: Constant): Option[Char]
5573
}
5674

5775
/** Module of Int literals */
5876
val Int: IntModule
5977
abstract class IntModule {
78+
/** Int literal */
79+
def apply(x: Int): Constant
80+
6081
/** Extractor for Int literals */
6182
def unapply(constant: Constant): Option[Int]
6283
}
6384

6485
/** Module of Long literals */
6586
val Long: LongModule
6687
abstract class LongModule {
88+
/** Long literal */
89+
def apply(x: Long): Constant
90+
6791
/** Extractor for Long literals */
6892
def unapply(constant: Constant): Option[Long]
6993
}
7094

7195
/** Module of Float literals */
7296
val Float: FloatModule
7397
abstract class FloatModule {
98+
/** Float literal */
99+
def apply(x: Float): Constant
100+
74101
/** Extractor for Float literals */
75102
def unapply(constant: Constant): Option[Float]
76103
}
77104

78105
/** Module of Double literals */
79106
val Double: DoubleModule
80107
abstract class DoubleModule {
108+
/** Double literal */
109+
def apply(x: Double): Constant
110+
81111
/** Extractor for Double literals */
82112
def unapply(constant: Constant): Option[Double]
83113
}
84114

85115
/** Module of String literals */
86116
val String: StringModule
87117
abstract class StringModule {
118+
/** String literal */
119+
def apply(x: String): Constant
120+
88121
/** Extractor for String literals */
89122
def unapply(constant: Constant): Option[String]
90123
}
91124

92125
/** Module of ClassTag literals */
93126
val ClassTag: ClassTagModule
94127
abstract class ClassTagModule {
128+
/** scala.reflect.ClassTag literal */
129+
def apply[T](implicit x: scala.reflect.ClassTag[T]): Constant
130+
95131
/** Extractor for ClassTag literals */
96132
def unapply(constant: Constant): Option[Type]
97133
}
@@ -100,6 +136,10 @@ trait ConstantOps extends Core {
100136
val Symbol: SymbolModule
101137
/** Extractor for scala.Symbol literals */
102138
abstract class SymbolModule {
139+
/** scala.Symbol literal */
140+
def apply(x: scala.Symbol): Constant
141+
142+
/** Extractor for scala.Symbol literals */
103143
def unapply(constant: Constant): Option[scala.Symbol]
104144
}
105145
}

0 commit comments

Comments
 (0)