Skip to content

Commit 8fc01e1

Browse files
committed
Более правильный вызов индексатора
1 parent a2bf074 commit 8fc01e1

File tree

2 files changed

+16
-2
lines changed

2 files changed

+16
-2
lines changed

src/OneScript.Native/Compiler/MethodCompiler.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -529,7 +529,7 @@ protected override void VisitIndexAccess(BslSyntaxNode node)
529529
if (indexExpression == null)
530530
{
531531
indexExpression = TryFindMagicGetterMethod(target, index)
532-
?? ExpressionHelpers.DynamicGetIndex(target, index);
532+
?? ExpressionHelpers.GetIndexedValue(target, index);
533533
}
534534

535535
_statementBuildParts.Push(indexExpression);
@@ -548,7 +548,7 @@ private void VisitIndexAccessWrite(BslSyntaxNode node)
548548
{
549549
var value = _statementBuildParts.Pop();
550550
indexExpression = TryFindMagicSetterMethod(target, index, value)
551-
?? ExpressionHelpers.DynamicSetIndex(target, index, value);
551+
?? ExpressionHelpers.SetIndexedValue(target, index, value);
552552
}
553553

554554
_statementBuildParts.Push(indexExpression);
@@ -594,6 +594,7 @@ private Expression TryCreateIndexExpression(BslSyntaxNode node, Expression targe
594594
{
595595
if (!typeof(BslObjectValue).IsAssignableFrom(target.Type))
596596
{
597+
// Мы не знаем тип выражения и будем выяснять это в рантайме
597598
return null;
598599
}
599600

tests/native-module.os

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010

1111
ВсеТесты.Добавить("ТестДолжен_ПроверитьВызовМетода");
1212
ВсеТесты.Добавить("ТестДолжен_ПроверитьВызовАссерта");
13+
ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтениеЗаписьПоИндексу");
1314

1415
Возврат ВсеТесты;
1516

@@ -26,3 +27,15 @@
2627
юТест.ПроверитьРавенство(1, 1);
2728
Сообщить("Выполнен вызов в сторону testrunner");
2829
КонецПроцедуры
30+
31+
Процедура ТестДолжен_ПроверитьЧтениеЗаписьПоИндексу() Экспорт
32+
33+
Массив = Новый Массив;
34+
Массив.Добавить(1);
35+
36+
юТест.ПроверитьРавенство(1, Массив[0]);
37+
Массив[0] = "Привет";
38+
39+
юТест.ПроверитьРавенство("Привет", Массив[0]);
40+
41+
КонецПроцедуры

0 commit comments

Comments
 (0)