Skip to content

native: Новый(ИмяТипа, МассивПараметров) не разворачивает массив в параметры конструктора #1739

Description

@nixel2007

Описание

В стековом режиме второй аргумент Новый(ИмяТипа, МассивПараметров) — это массив
параметров конструктора, и он разворачивается. В #native тот же массив передаётся
конструктору как одно значение.

Расхождение семантики, без ошибки компиляции.

Воспроизведение

Один и тот же код в двух модулях, различаются ровно директивой #native.

Классы/СтековыйКласс.os:

Функция НовыйСПараметрами(ИмяТипа, Параметры) Экспорт
	Возврат Новый(Строка(ИмяТипа), Параметры);
КонецФункции

Процедура ПриСозданииОбъекта()
КонецПроцедуры

Классы/НативныйКласс.os:

#native

Функция НовыйСПараметрами(ИмяТипа, Параметры) Экспорт
	Возврат Новый(Строка(ИмяТипа), Параметры);
КонецФункции

Процедура ПриСозданииОбъекта()
КонецПроцедуры

Сценарий запуска:

#Использовать "."

Парам = Новый Массив();
Парам.Добавить(3);

Стек = Новый СтековыйКласс();
Сообщить("stack: количество = " + Стек.НовыйСПараметрами("Массив", Парам).Количество());

Нат = Новый НативныйКласс();
Попытка
	Сообщить("native: количество = " + Нат.НовыйСПараметрами("Массив", Парам).Количество());
Исключение
	Сообщить("native УПАЛ: " + ОписаниеОшибки());
КонецПопытки;

Фактическое поведение

stack: количество = 3
native УПАЛ: OneScript.StandardLibrary.Collections.ArrayImpl: Массив Conversion to type 'Number' is not supported

То есть в native конструктору Массив достался сам массив параметров вместо числа 3.

Ожидаемое поведение

stack: количество = 3
native: количество = 3

Окружение

Воспроизводится одинаково на:

  • 2.2.0, linux-x64
  • 2.3.0-dev+6 (ночная сборка), linux-x64

Влияние

Обхода нет. Это базовая операция для любой фабрики объектов, создающей экземпляры
по имени типа с заранее собранным списком параметров.

В autumn на этом застревает модуль
фабричных методов — точка, где создаются все компоненты фреймворка.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    nativeКомпиляция в CLR в движке 2.0

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions