будто результат функции copy() в последующем коде не воспринимается, как
число.
Кажеться, проблема в codegen.dpr:
#pas
function map_copy(parser:TParser; args:TArgs):TScData;
var tp:byte;
begin
tp := args.Values[0].GetType;
if tp <> data_code then // То-есть, результат только типа data_code или data_str, а нужен, наверное, data_int.
tp := data_str;
Result.SetValue(copy(args.Values[0].toStr(), args.Values[1].toInt(), args.Values[2].toInt()), tp);
end;