CFA branches=50
tsz is 1.3x faster 313 lines 9 KB
Timing
Files
// Control flow analysis stress test
type Entity =
| { kind: "type0"; data0: string; common: number }
| { kind: "type1"; data1: string; common: number }
| { kind: "type2"; data2: string; common: number }
| { kind: "type3"; data3: string; common: number }
| { kind: "type4"; data4: string; common: number }
| { kind: "type5"; data5: string; common: number }
| { kind: "type6"; data6: string; common: number }
| { kind: "type7"; data7: string; common: number }
| { kind: "type8"; data8: string; common: number }
| { kind: "type9"; data9: string; common: number }
| { kind: "type10"; data10: string; common: number }
| { kind: "type11"; data11: string; common: number }
| { kind: "type12"; data12: string; common: number }
| { kind: "type13"; data13: string; common: number }
| { kind: "type14"; data14: string; common: number }
| { kind: "type15"; data15: string; common: number }
| { kind: "type16"; data16: string; common: number }
| { kind: "type17"; data17: string; common: number }
| { kind: "type18"; data18: string; common: number }
| { kind: "type19"; data19: string; common: number }
| { kind: "type20"; data20: string; common: number }
| { kind: "type21"; data21: string; common: number }
| { kind: "type22"; data22: string; common: number }
| { kind: "type23"; data23: string; common: number }
| { kind: "type24"; data24: string; common: number }
| { kind: "type25"; data25: string; common: number }
| { kind: "type26"; data26: string; common: number }
| { kind: "type27"; data27: string; common: number }
| { kind: "type28"; data28: string; common: number }
| { kind: "type29"; data29: string; common: number }
| { kind: "type30"; data30: string; common: number }
| { kind: "type31"; data31: string; common: number }
| { kind: "type32"; data32: string; common: number }
| { kind: "type33"; data33: string; common: number }
| { kind: "type34"; data34: string; common: number }
| { kind: "type35"; data35: string; common: number }
| { kind: "type36"; data36: string; common: number }
| { kind: "type37"; data37: string; common: number }
| { kind: "type38"; data38: string; common: number }
| { kind: "type39"; data39: string; common: number }
| { kind: "type40"; data40: string; common: number }
| { kind: "type41"; data41: string; common: number }
| { kind: "type42"; data42: string; common: number }
| { kind: "type43"; data43: string; common: number }
| { kind: "type44"; data44: string; common: number }
| { kind: "type45"; data45: string; common: number }
| { kind: "type46"; data46: string; common: number }
| { kind: "type47"; data47: string; common: number }
| { kind: "type48"; data48: string; common: number }
| { kind: "type49"; data49: string; common: number };
function processEntity(e: Entity): string {
switch (e.kind) {
case "type0": return e.data0;
case "type1": return e.data1;
case "type2": return e.data2;
case "type3": return e.data3;
case "type4": return e.data4;
case "type5": return e.data5;
case "type6": return e.data6;
case "type7": return e.data7;
case "type8": return e.data8;
case "type9": return e.data9;
case "type10": return e.data10;
case "type11": return e.data11;
case "type12": return e.data12;
case "type13": return e.data13;
case "type14": return e.data14;
case "type15": return e.data15;
case "type16": return e.data16;
case "type17": return e.data17;
case "type18": return e.data18;
case "type19": return e.data19;
case "type20": return e.data20;
case "type21": return e.data21;
case "type22": return e.data22;
case "type23": return e.data23;
case "type24": return e.data24;
case "type25": return e.data25;
case "type26": return e.data26;
case "type27": return e.data27;
case "type28": return e.data28;
case "type29": return e.data29;
case "type30": return e.data30;
case "type31": return e.data31;
case "type32": return e.data32;
case "type33": return e.data33;
case "type34": return e.data34;
case "type35": return e.data35;
case "type36": return e.data36;
case "type37": return e.data37;
case "type38": return e.data38;
case "type39": return e.data39;
case "type40": return e.data40;
case "type41": return e.data41;
case "type42": return e.data42;
case "type43": return e.data43;
case "type44": return e.data44;
case "type45": return e.data45;
case "type46": return e.data46;
case "type47": return e.data47;
case "type48": return e.data48;
case "type49": return e.data49;
default: throw new Error("unreachable");
}
}
function processWithIf(e: Entity): string {
if (e.kind === "type0") return e.data0;
if (e.kind === "type1") return e.data1;
if (e.kind === "type2") return e.data2;
if (e.kind === "type3") return e.data3;
if (e.kind === "type4") return e.data4;
if (e.kind === "type5") return e.data5;
if (e.kind === "type6") return e.data6;
if (e.kind === "type7") return e.data7;
if (e.kind === "type8") return e.data8;
if (e.kind === "type9") return e.data9;
if (e.kind === "type10") return e.data10;
if (e.kind === "type11") return e.data11;
if (e.kind === "type12") return e.data12;
if (e.kind === "type13") return e.data13;
if (e.kind === "type14") return e.data14;
if (e.kind === "type15") return e.data15;
if (e.kind === "type16") return e.data16;
if (e.kind === "type17") return e.data17;
if (e.kind === "type18") return e.data18;
if (e.kind === "type19") return e.data19;
if (e.kind === "type20") return e.data20;
if (e.kind === "type21") return e.data21;
if (e.kind === "type22") return e.data22;
if (e.kind === "type23") return e.data23;
if (e.kind === "type24") return e.data24;
if (e.kind === "type25") return e.data25;
if (e.kind === "type26") return e.data26;
if (e.kind === "type27") return e.data27;
if (e.kind === "type28") return e.data28;
if (e.kind === "type29") return e.data29;
if (e.kind === "type30") return e.data30;
if (e.kind === "type31") return e.data31;
if (e.kind === "type32") return e.data32;
if (e.kind === "type33") return e.data33;
if (e.kind === "type34") return e.data34;
if (e.kind === "type35") return e.data35;
if (e.kind === "type36") return e.data36;
if (e.kind === "type37") return e.data37;
if (e.kind === "type38") return e.data38;
if (e.kind === "type39") return e.data39;
if (e.kind === "type40") return e.data40;
if (e.kind === "type41") return e.data41;
if (e.kind === "type42") return e.data42;
if (e.kind === "type43") return e.data43;
if (e.kind === "type44") return e.data44;
if (e.kind === "type45") return e.data45;
if (e.kind === "type46") return e.data46;
if (e.kind === "type47") return e.data47;
if (e.kind === "type48") return e.data48;
if (e.kind === "type49") return e.data49;
return processEntity(e);
}