Skip to content

Commit ff14afa

Browse files
committed
Handle HKTermLambdas in Tasty and TastyImpl
1 parent e965128 commit ff14afa

File tree

2 files changed

+29
-0
lines changed

2 files changed

+29
-0
lines changed

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

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -759,12 +759,14 @@ class TastyImpl(val rootContext: Contexts.Context) extends scala.tasty.Tasty { s
759759
type LambdaType[ParamInfo <: TypeOrBounds] = Types.LambdaType { type PInfo = ParamInfo }
760760
type MethodType = Types.MethodType
761761
type PolyType = Types.PolyType
762+
type TermLambda = Types.TermLambda
762763
type TypeLambda = Types.TypeLambda
763764

764765
def typeClassTag: ClassTag[Type] = implicitly[ClassTag[Type]]
765766
def recursiveTypeClassTag: ClassTag[RecursiveType] = implicitly[ClassTag[RecursiveType]]
766767
def methodTypeClassTag: ClassTag[MethodType] = implicitly[ClassTag[MethodType]]
767768
def polyTypeClassTag: ClassTag[PolyType] = implicitly[ClassTag[PolyType]]
769+
def termLambdaClassTag: ClassTag[TermLambda] = implicitly[ClassTag[TermLambda]]
768770
def typeLambdaClassTag: ClassTag[TypeLambda] = implicitly[ClassTag[TypeLambda]]
769771

770772
def MethodTypeDeco(tpe: MethodType): MethodTypeAPI = new MethodTypeAPI {
@@ -781,6 +783,12 @@ class TastyImpl(val rootContext: Contexts.Context) extends scala.tasty.Tasty { s
781783
def resultTpe(implicit ctx: Context): Type = tpe.resType
782784
}
783785

786+
def TermLambdaDeco(tpe: Types.TermLambda): TermLambdaAPI = new TermLambdaAPI {
787+
def paramNames(implicit ctx: Context): List[String] = tpe.paramNames.map(_.toString)
788+
def paramTypes(implicit ctx: Context): List[Type] = tpe.paramInfos
789+
def resultTpe(implicit ctx: Context): Type = tpe.resType
790+
}
791+
784792
def TypeLambdaDeco(tpe: Types.TypeLambda): TypeLambdaAPI = new TypeLambdaAPI {
785793
def paramNames(implicit ctx: Context): List[String] = tpe.paramNames.map(_.toString)
786794
def paramTypes(implicit ctx: Context): List[TypeBounds] = tpe.paramInfos
@@ -928,6 +936,13 @@ class TastyImpl(val rootContext: Contexts.Context) extends scala.tasty.Tasty { s
928936
}
929937
}
930938

939+
object TermLambda extends TermLambdaExtractor {
940+
def unapply(x: TermLambda)(implicit ctx: Context): Option[(List[String], List[Type], Type)] = x match {
941+
case x: TermLambda => Some(x.paramNames.map(_.toString), x.paramInfos, x.resType)
942+
case _ => None
943+
}
944+
}
945+
931946
object TypeLambda extends TypeLambdaExtractor {
932947
def unapply(x: TypeLambda)(implicit ctx: Context): Option[(List[String], List[TypeBounds], Type)] = x match {
933948
case x: TypeLambda => Some(x.paramNames.map(_.toString), x.paramInfos, x.resType)

library/src/scala/tasty/Tasty.scala

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -593,11 +593,13 @@ abstract class Tasty { tasty =>
593593
type LambdaType[ParamInfo <: TypeOrBounds] <: Type
594594
type MethodType <: LambdaType[Type]
595595
type PolyType <: LambdaType[TypeBounds]
596+
type TermLambda <: LambdaType[Type]
596597
type TypeLambda <: LambdaType[TypeBounds]
597598

598599
implicit def typeClassTag: ClassTag[Type]
599600
implicit def methodTypeClassTag: ClassTag[MethodType]
600601
implicit def polyTypeClassTag: ClassTag[PolyType]
602+
implicit def termLambdaClassTag: ClassTag[TermLambda]
601603
implicit def typeLambdaClassTag: ClassTag[TypeLambda]
602604
implicit def recursiveTypeClassTag: ClassTag[RecursiveType]
603605

@@ -617,6 +619,13 @@ abstract class Tasty { tasty =>
617619
}
618620
implicit def PolyTypeDeco(tpt: PolyType): PolyTypeAPI
619621

622+
trait TermLambdaAPI {
623+
def paramNames(implicit ctx: Context): List[String]
624+
def paramTypes(implicit ctx: Context): List[Type]
625+
def resultTpe(implicit ctx: Context): Type
626+
}
627+
implicit def TermLambdaDeco(tpt: TermLambda): TermLambdaAPI
628+
620629
trait TypeLambdaAPI {
621630
def paramNames(implicit ctx: Context): List[String]
622631
def paramTypes(implicit ctx: Context): List[TypeBounds]
@@ -714,6 +723,11 @@ abstract class Tasty { tasty =>
714723
def unapply(x: PolyType)(implicit ctx: Context): Option[(List[String], List[TypeBounds], Type)]
715724
}
716725

726+
val TermLambda: TermLambdaExtractor
727+
abstract class TermLambdaExtractor {
728+
def unapply(x: TermLambda)(implicit ctx: Context): Option[(List[String], List[Type], Type)]
729+
}
730+
717731
val TypeLambda: TypeLambdaExtractor
718732
abstract class TypeLambdaExtractor {
719733
def unapply(x: TypeLambda)(implicit ctx: Context): Option[(List[String], List[TypeBounds], Type)]

0 commit comments

Comments
 (0)