Stackflow

ViKViK
отредактировано October 2015 Раздел: FastScript
Тема должна была называться "Stack overflow", просьба к модераторам переименовать.

Доброго времени суток.
Эта тема - баг-репорт, не нашел куда скидывать их, так что оставлю здесь.
Обратил внимание на странное поведение TfsScript, если в тексте скрипте присутствует упоминание необъявленных полей/методов класса, пример:
program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils, fs_iinterpreter, fs_ipascal;

var
  fsScript1: TfsScript;

procedure Compile();
var
  errorText: string;
begin
  fsScript1.Clear();
  fsScript1.AddClass(TObject, 'TObject');

  fsScript1.Lines.Text := 'var obj: TObject; begin obj.Test(); end.';
  try
    if (not fsScript1.Compile()) then
      errorText := fsScript1.ErrorMsg + ' in ' + fsScript1.ErrorPos
    else
      errorText := 'OK'
  except on ex: Exception do
    errorText := ex.Message;
  end;
  WriteLn('Result: ' + errorText);
  ReadLn;
end;

begin
  fsScript1 := TfsScript.Create(nil);
  fsScript1.Parent := fsGlobalUnit;
  fsScript1.SyntaxType := 'PascalScript';

  Compile();
  Compile();
end.
то при первой компиляции выдается ошибка "Stack overflow", а при повторной компиляции программа падает на "fsScript1.Compile", причем try/except не спасает.
После долгих тестов выяснил, что если в uses добавить frxRes, то все начинает работать нормально и выдается ошибка "Undeclared identifier".
ИМХО либо нужно это передать в отдела разработки или включить в документацию данную особенность, либо если я что-то делал изначально не так, то просьба показать в чем моя ошибка

Оставить комментарий

Многофункциональный текстовый редактор. Чтобы отредактировать стиль параграфа, нажмите TAB, чтобы перейти к меню абзаца. Там вы можете выбрать стиль. По умолчанию не выбран ни один стиль. Когда вы выберете текст, появится встроенное меню форматирования. Нажмите TAB, чтобы войти в него. Некоторые элементы, такие как многофункциональные вставки ссылок, картинок, индикаторов загрузки и сообщений об ошибок могут быть вставлены в редактор. Вы можете перемещаться по ним, используя стрелки внутри редактора и удалять с помощью клавиш delete или backspace.