Clean up some code and fix all TypeScript type errors

This commit is contained in:
Sam Vervaeck 2022-09-15 20:48:36 +02:00
parent 21a05cf62d
commit 31e99fd8ba

View file

@ -1,11 +1,9 @@
import { import {
Declaration, Declaration,
EnumDeclaration, EnumDeclaration,
EnumDeclarationStructElement,
Expression, Expression,
LetDeclaration, LetDeclaration,
Pattern, Pattern,
Scope,
SourceFile, SourceFile,
StructDeclaration, StructDeclaration,
Symkind, Symkind,
@ -366,7 +364,7 @@ export class TNominal extends TypeBase {
public readonly kind = TypeKind.Nominal; public readonly kind = TypeKind.Nominal;
public constructor( public constructor(
public decl: Declaration, public decl: StructDeclaration | EnumDeclaration,
public node: Syntax | null = null, public node: Syntax | null = null,
) { ) {
super(node); super(node);
@ -383,7 +381,7 @@ export class TNominal extends TypeBase {
); );
} }
public substitute(sub: TVSub): Type { public substitute(_sub: TVSub): Type {
return this; return this;
} }
@ -1912,12 +1910,12 @@ export class Checker {
} }
if (left.kind === TypeKind.Nominal && right.kind === TypeKind.Nominal) { if (left.kind === TypeKind.Nominal && right.kind === TypeKind.Nominal) {
if (left.decl !== right.decl) { if (left.decl === right.decl) {
return true;
}
this.diagnostics.add(new UnificationFailedDiagnostic(left, right, [...constraint.getNodes()])); this.diagnostics.add(new UnificationFailedDiagnostic(left, right, [...constraint.getNodes()]));
return false; return false;
} }
return true;
}
if (left.kind === TypeKind.App && right.kind === TypeKind.App) { if (left.kind === TypeKind.App && right.kind === TypeKind.App) {
return unify(left.left, right.left) return unify(left.left, right.left)
@ -1925,10 +1923,6 @@ export class Checker {
} }
if (left.kind === TypeKind.Record && right.kind === TypeKind.Record) { if (left.kind === TypeKind.Record && right.kind === TypeKind.Record) {
if (left.decl !== right.decl) {
this.diagnostics.add(new UnificationFailedDiagnostic(left, right, [...constraint.getNodes()]));
return false;
}
let success = true; let success = true;
const remaining = new Set(right.fields.keys()); const remaining = new Set(right.fields.keys());
for (const [fieldName, fieldType] of left.fields) { for (const [fieldName, fieldType] of left.fields) {