@@ -31,12 +31,10 @@ object ArityRaising extends Phase[CoreTransformed, CoreTransformed] {
3131 def transform (toplevel : Toplevel )(using C : Context , DC : DeclarationContext ): Toplevel = toplevel match {
3232
3333 case Toplevel .Def (id, BlockLit (tparams, cparams, vparams, bparams, body)) => {
34- // Recursively flatten a parameter into (params, bindings to reconstruct records)
3534 def flattenParam (param : ValueParam ): (List [ValueParam ], List [(Id , ValueType , Expr )]) = param match {
3635 case ValueParam (paramId, tpe @ ValueType .Data (name, targs)) =>
3736 DC .findData(name) match {
3837 case Some (Data (_, List (), List (Constructor (ctor, List (), fields)))) =>
39- // Recursively flatten each field
4038 val flattened = fields.map { case Field (fieldName, fieldType) =>
4139 val freshId = Id (fieldName.name)
4240 flattenParam(ValueParam (freshId, fieldType))
@@ -47,10 +45,12 @@ object ArityRaising extends Phase[CoreTransformed, CoreTransformed] {
4745 val allBindings = nestedBindings.flatten
4846
4947 // Create binding to reconstruct this record
50- val vars = flatParams.map(p => ValueVar (p.id, p.tpe))
51- val binding = (paramId, tpe, Make (tpe, ctor, List (), vars))
48+ val fieldVars = fields.map { case Field (fieldName, fieldType) =>
49+ ValueVar (Id (fieldName.name), fieldType)
50+ }
51+ val binding = (paramId, tpe, Make (tpe, ctor, List (), fieldVars))
5252
53- (flatParams, binding :: allBindings )
53+ (flatParams, allBindings :+ binding )
5454
5555 case _ => (List (param), List ())
5656 }
@@ -87,7 +87,6 @@ object ArityRaising extends Phase[CoreTransformed, CoreTransformed] {
8787 def transform (stmt : Stmt )(using C : Context , DC : DeclarationContext ): Stmt = stmt match {
8888
8989 case Stmt .App (callee @ BlockVar (id, BlockType .Function (List (), List (), vparamsTypes, List (), returnTpe), annotatedCapt), targs, vargs, bargs) =>
90- // Recursively flatten an argument
9190 def flattenArg (arg : Expr , argType : ValueType ): (List [Expr ], List [ValueType ], List [(Expr , Id , List [ValueParam ])]) = argType match {
9291 case ValueType .Data (name, targs) =>
9392 DC .findData(name) match {
@@ -97,7 +96,6 @@ object ArityRaising extends Phase[CoreTransformed, CoreTransformed] {
9796 val freshVar = ValueVar (freshId, fieldType)
9897 val freshParam = ValueParam (freshId, fieldType)
9998
100- // Recursively flatten if this field is also a record
10199 val (nestedVars, nestedTypes, nestedMatches) = flattenArg(freshVar, fieldType)
102100 (freshVar, freshParam, fieldType, nestedVars, nestedTypes, nestedMatches)
103101 }
0 commit comments