1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/openharmony-arkcompiler_ets_frontend

 / Детали:

[Ошибка]: [ArkTs] При работе с общими классами происходит вызов неверной функции

Предстоит сделать
Владелец
Создано  
04.03.2025

Какова проблема?

Следующий код не работает так, как ожидалось:

let res: number = 0;

class Base<T, S> {
    foo() { res = 100 + 1; }
    static foo() { res = 300 + 1; }
}

class Derived<T, S> extends Base<T, S> {
    foo() {
        res = 200 + 1;
    }
}

class Derived2 extends Base<Object, Number> {
    foo() {
        res = 200 + 1;
    }
}

function main(): void {
  // НЕПРАВИЛЬНО: call.virt.short Derived.foo:(Derived), v0
  Derived.foo(); // вызов статического метода базового класса
  assertEQ(res, 300 + 1);

  // ПРАВИЛЬНО: call.short <static> Base.foo:()
  Derived2.foo(); // вызов статического метода базового класса
  assertEQ(res, 300 + 1);
}

Какое поведение ожидалось?

Компилироваться и запускаться без ошибок.

Как воспроизвести эту ошибку

test.sts:

let res: number = 0;

class Base<T, S> {
    foo() { res = 100 + 1; }
    static foo() { res = 300 + 1; }
}

class Derived<T, S> extends Base<T, S> {
    foo() {
        res = 200 + 1;
    }
}

class Derived2 extends Base<Object, Number> {
    foo() {
        res = 200 + 1;
    }
}

function main(): void {
  // НЕПРАВИЛЬНО: call.virt.short Derived.foo:(Derived), v0
  Derived.foo(); // вызов статического метода базового класса
  assertEQ(res, 300 + 1);

  // ПРАВИЛЬНО: call.short <static> Base.foo:()
  Derived2.foo(); // вызов статического метода базового класса
  assertEQ(res, 300 + 1);
}

./es2panda ./test.sts

Дополнительная информация

Информация о версиях или ветках

  • master
  • 5.0-Beta1
  • Release 4.1
  • Release 4.0
  • Release 3.2

Комментарий (0)

GitLife Service Account Задача создана
GitLife Service Account добавлено
 
waiting_for_assign
label.
GitLife Service Account добавлено
 
bug
label.
Развернуть журнал операций

Вход Перед тем как оставить комментарий

Статус
Ответственный
Контрольная точка
Pull Requests
Связанные запросы на слияние могут быть закрыты после их объединения
Ветки
Дата начала   -   Крайний срок
-
Закрепить/Открепить
Приоритет
Участники(1)
1
https://api.gitlife.ru/oschina-mirror/openharmony-arkcompiler_ets_frontend.git
git@api.gitlife.ru:oschina-mirror/openharmony-arkcompiler_ets_frontend.git
oschina-mirror
openharmony-arkcompiler_ets_frontend
openharmony-arkcompiler_ets_frontend