diff --git a/src/OneScript.StandardLibrary/Reflector.cs b/src/OneScript.StandardLibrary/Reflector.cs index 0032434d6..ce00dd30c 100644 --- a/src/OneScript.StandardLibrary/Reflector.cs +++ b/src/OneScript.StandardLibrary/Reflector.cs @@ -271,6 +271,12 @@ private void FillPropertiesTableForObject(ValueTable result, IValue target, bool var properties = scriptObject.GetProperties() .Where(prop => !fieldNames.Contains(prop.Name)); + + if (!withPrivate) + { + properties = properties.OfType() + .Where(p => p.IsExported); + } FillPropertiesTable(result, properties.Concat(fields)); } diff --git a/src/ScriptEngine/Machine/Contexts/UserScriptContextInstance.cs b/src/ScriptEngine/Machine/Contexts/UserScriptContextInstance.cs index 0c980cb07..acb163da4 100644 --- a/src/ScriptEngine/Machine/Contexts/UserScriptContextInstance.cs +++ b/src/ScriptEngine/Machine/Contexts/UserScriptContextInstance.cs @@ -305,9 +305,9 @@ protected override string ConvertToString() void IDebugPresentationAcceptor.Accept(IDebugValueVisitor visitor) { - var instanceProps = Module - .Properties + var instanceProps = this.GetProperties() .OfType() + .Where(p => p.DispatchId != THISOBJ_VARIABLE_INDEX) .OrderBy(x => x.DispatchId) .ToDictionary(x => x.Name, x => x.DispatchId); diff --git a/tests/reflector.os b/tests/reflector.os index 7973d1ca4..0e70763f5 100644 --- a/tests/reflector.os +++ b/tests/reflector.os @@ -50,6 +50,10 @@ ВсеТесты.Добавить("ТестДолжен_ПроверитьИзвестныеТипы_СОтборомПримитивный"); ВсеТесты.Добавить("ТестДолжен_ПроверитьИзвестныеТипы_СОтборомПользовательский"); + ВсеТесты.Добавить("ТестДолжен_ПроверитьПередачуВнешнихПараметров"); + ВсеТесты.Добавить("ТестДолжен_ПроверитьРефлексиюВнешнегоПараметра"); + ВсеТесты.Добавить("ТестДолжен_ПроверитьРефлексиюВнешнегоПараметраВРежимеПриватных"); + #Если Windows Тогда ВсеТесты.Добавить("ТестДолжен_ПроверитьВызовМетодаComОбъекта"); #КонецЕсли @@ -882,3 +886,45 @@ юТест.ПроверитьТип(Рез, "Булево"); КонецПроцедуры #КонецЕсли + +Процедура ТестДолжен_ПроверитьПередачуВнешнихПараметров() Экспорт + Код = "Перем Результат Экспорт; Результат = Множитель * 5"; + Параметры = Новый Структура("Множитель", 2); + + ЗагружаемыйСценарий = ЗагрузитьСценарийИзСтроки(Код, Параметры); + + юТест.ПроверитьРавенство(10, ЗагружаемыйСценарий.Результат); +КонецПроцедуры + +Процедура ТестДолжен_ПроверитьРефлексиюВнешнегоПараметра() Экспорт + Код = "Перем Результат Экспорт; Результат = Множитель * 5"; + Параметры = Новый Структура("Множитель", 2); + + ЗагружаемыйСценарий = ЗагрузитьСценарийИзСтроки(Код, Параметры); + + Рефлектор = Новый Рефлектор; + ТаблицаСвойств = Рефлектор.ПолучитьТаблицуСвойств(ЗагружаемыйСценарий); + + юТест.ПроверитьРавенство(1, ТаблицаСвойств.Количество()); + юТест.ПроверитьРавенство("Результат", ТаблицаСвойств[0].Имя); + +КонецПроцедуры + +Процедура ТестДолжен_ПроверитьРефлексиюВнешнегоПараметраВРежимеПриватных() Экспорт + Код = "Перем Результат Экспорт; Результат = Множитель * 5"; + Параметры = Новый Структура("Множитель", 2); + + ЗагружаемыйСценарий = ЗагрузитьСценарийИзСтроки(Код, Параметры); + + Рефлектор = Новый Рефлектор; + ТаблицаСвойств = Рефлектор.ПолучитьТаблицуСвойств(ЗагружаемыйСценарий, Истина); + ТаблицаСвойств.Сортировать("Имя"); + + юТест.ПроверитьРавенство(2, ТаблицаСвойств.Количество()); + юТест.ПроверитьРавенство("Множитель", ТаблицаСвойств[0].Имя); + юТест.ПроверитьЛожь(ТаблицаСвойств[0].Экспорт); + + юТест.ПроверитьРавенство("Результат", ТаблицаСвойств[1].Имя); + юТест.ПроверитьИстину(ТаблицаСвойств[1].Экспорт); + +КонецПроцедуры