Skip to content
This repository was archived by the owner on Sep 28, 2021. It is now read-only.

Commit b910480

Browse files
committed
TYCK: subst concall properly
1 parent 02b961e commit b910480

3 files changed

Lines changed: 17 additions & 11 deletions

File tree

‎base/src/main/java/org/aya/core/def/DataDef.java‎

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,5 +57,13 @@ public record CtorTelescopes(
5757
sortTele,
5858
conTele.map(Term.Param::toArg));
5959
}
60+
61+
public @NotNull CtorTelescopes rename() {
62+
return new CtorTelescopes(dataTele.map(Term.Param::rename), sortTele, conTele.map(Term.Param::rename));
63+
}
64+
65+
public @NotNull ImmutableSeq<Term.Param> params() {
66+
return dataTele.concat(conTele);
67+
}
6068
}
6169
}

‎base/src/main/java/org/aya/tyck/ExprTycker.java‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -499,11 +499,11 @@ private static boolean needImplicitParamIns(@NotNull Expr expr, @NotNull FormTer
499499
} else if (var.core instanceof CtorDef || var.concrete instanceof Decl.DataDecl.DataCtor) {
500500
var conVar = (DefVar<CtorDef, Decl.DataDecl.DataCtor>) var;
501501
var level = levelStuffs(pos, conVar);
502-
var telescopes = CtorDef.telescopes(conVar, level._2);
503502
var tele = Term.Param.subst(Def.defTele(conVar), level._1);
504503
var type = FormTerm.Pi.make(tele, Def.defResult(conVar).subst(Substituter.TermSubst.EMPTY, level._1));
504+
var telescopes = CtorDef.telescopes(conVar, level._2).rename();
505505
var body = telescopes.toConCall(conVar).subst(Substituter.TermSubst.EMPTY, level._1);
506-
return new Result(IntroTerm.Lambda.make(tele, body), type);
506+
return new Result(IntroTerm.Lambda.make(telescopes.params(), body), type);
507507
} else if (var.core instanceof FieldDef || var.concrete instanceof Decl.StructField) {
508508
// the code runs to here because we are tycking a StructField in a StructDecl
509509
// there should be two-stage check for this case:

‎base/src/test/java/org/aya/tyck/TyckDeclTest.java‎

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,7 @@
1616
import org.aya.core.def.DataDef;
1717
import org.aya.core.def.Def;
1818
import org.aya.core.def.FnDef;
19-
import org.aya.core.pat.Pat;
20-
import org.aya.core.term.RefTerm;
19+
import org.aya.core.term.CallTerm;
2120
import org.aya.test.ThrowingReporter;
2221
import org.intellij.lang.annotations.Language;
2322
import org.jetbrains.annotations.NonNls;
@@ -48,17 +47,16 @@ private FnDef successTyckFn(@NotNull @NonNls @Language("TEXT") String code) {
4847
def xyr (zero : Nat) : Nat
4948
| zero => zero
5049
| suc n => zero""");
50+
// ^ the latter `zero` refers to the `zero` parameter, and will be substituted as `suc n`
5151
var nat = (DataDef) defs.get(0);
5252
var xyr = (FnDef) defs.get(1);
53-
var ctors = nat.body;
53+
var ctors = nat.body;
5454
assertEquals(2, ctors.size());
5555
var clauses = xyr.body.getRightValue();
56-
var zeroToZero = clauses.get(0);
57-
var zeroCtor = ctors.get(0);
58-
assertEquals(0, zeroCtor.selfTele.size());
59-
var zeroParam = xyr.telescope().get(0);
60-
assertEquals(((RefTerm) zeroToZero.body()).var(), zeroParam.ref());
61-
assertEquals(zeroCtor.ref(), ((Pat.Ctor) zeroToZero.patterns().get(0)).ref());
56+
var sucToZero = clauses.get(1);
57+
var sucCtor = ctors.get(1);
58+
assertEquals(1, sucCtor.selfTele.size());
59+
assertEquals(((CallTerm.Con) sucToZero.body()).ref(), sucCtor.ref);
6260
}
6361

6462
public static @NotNull ImmutableSeq<Stmt> successDesugarDecls(@Language("TEXT") @NonNls @NotNull String text) {

0 commit comments

Comments
 (0)