Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit de174c5

Browse files
fix: select correct override function (#2822)
1 parent 4655745 commit de174c5

File tree

6 files changed

+4472
-3
lines changed

6 files changed

+4472
-3
lines changed

‎src/compiler.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6618,6 +6618,7 @@ export class Compiler extends DiagnosticEmitter {
66186618
);
66196619
let overrideInstances = this.resolver.resolveOverrides(instance);
66206620
if (overrideInstances) {
6621+
let mostRecentInheritanceMapping = new Map<Class, Class>();
66216622
for (let i = 0, k = overrideInstances.length; i < k; ++i) {
66226623
let overrideInstance = overrideInstances[i];
66236624
if (!overrideInstance.is(CommonFlags.Compiled)) continue; // errored
@@ -6680,7 +6681,13 @@ export class Compiler extends DiagnosticEmitter {
66806681
if (instanceMembers && instanceMembers.has(instance.declaration.name.text)) {
66816682
continue; // skip those not inheriting
66826683
}
6683-
builder.addCase(extender.id, stmts);
6684+
if (
6685+
!mostRecentInheritanceMapping.has(extender) ||
6686+
!assert(mostRecentInheritanceMapping.get(extender)).extends(classInstance)
6687+
) {
6688+
mostRecentInheritanceMapping.set(extender, classInstance);
6689+
builder.addOrReplaceCase(extender.id, stmts);
6690+
}
66846691
}
66856692
}
66866693
}

‎src/module.ts

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3418,16 +3418,32 @@ export class SwitchBuilder {
34183418
this.condition = condition;
34193419
}
34203420

3421+
/** Links a case to the specified branch, replace old case if it is linked. */
3422+
addOrReplaceCase(value: i32, code: ExpressionRef[]): void {
3423+
const valueIndex = this.values.indexOf(value);
3424+
const codeIndex = this.addCode(code);
3425+
if (valueIndex >= 0) {
3426+
this.indexes[valueIndex] = codeIndex;
3427+
} else {
3428+
this.values.push(value);
3429+
this.indexes.push(codeIndex);
3430+
}
3431+
}
3432+
34213433
/** Links a case to the specified branch. */
34223434
addCase(value: i32, code: ExpressionRef[]): void {
3435+
this.values.push(value);
3436+
this.indexes.push(this.addCode(code));
3437+
}
3438+
3439+
private addCode(code: ExpressionRef[]): i32 {
34233440
let cases = this.cases;
34243441
let index = cases.indexOf(code);
34253442
if (index < 0) {
34263443
index = cases.length;
34273444
cases.push(code);
34283445
}
3429-
this.values.push(value);
3430-
this.indexes.push(index);
3446+
return index;
34313447
}
34323448

34333449
/** Links the default branch. */

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /