(*) С6. Сообщения генератора кода

На верх  Назад  Вперёд

В этом разделе описаны все сообщения, которые могут появиться, если генератор кода обнаружит ошибку кодирования.

Сообщение

Описание

Error: Parameter list size exceeds 65535 bytes

Для процессора I386 ограничен список параметров 65535 байтами (тому причиной инструкция RET).

Error: File types must be var parameters

Вы не можете указать файлы как значения параметров, то есть они всегда должны быть объявлены как параметры var.

Error: The use of a far pointer isn’t allowed there

Free Pascal не поддерживает указатели far, поэтому вы не можете взять адрес выражения, которое имеет связь far. Конструкция mem имеет связь far, поэтому следующий код вызовет эту ошибку:

var p : pointer;
...
p:=@mem[a000:000];
 

Error: EXPORT declared functions can’t be called

Больше не используется.

Warning: Possible illegal call of constructor or destructor

Компилятор обнаружил, что конструктор или деструктор вызываются внутри метода. Это вероятно приведёт к проблемам, так как конструкторы/деструкторы требуют входных параметров.

Note: Inefficient code

Ваш оператор вызывает сомнения у компилятора.

Warning: unreachable code

Вы указали конструкцию, которая никогда не будет выполнена. Например:

while false do
begin
  {.. Код ...}
end;

 

Error: Abstract methods can’t be called directly

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

Register Сообщ1 weight Сообщ2 Сообщ3

Отладочное сообщение. Отображается, если компилятор ожидает переменную для сохранения в регистрах.

Stack frame is omitted

Некоторые процедуры/функции не нуждаются в полном стековом фрейме, и им пренебрегают. Это сообщение появляется, если используется опция –vd.

Error: Object or class methods can’t be inline.

Вы не можете иметь предопределённые методы объекта.

Error: Procvar calls cannot be inline.

Процедура с процедурной переменной не может быть предопределённой.

Error: No code for inline procedure stored

Компилятор не может записать код для предопределённой процедуры.

Error: Element zero of an ansi/wide­ or longstring can’t be accessed, use (set)length instead

Вы должны использовать setlength для установки длины для типов ansi/wide/longstring и length, чтобы получить длину такого строкового типа.

Error: Constructors or destructors cannot be called inside a ’with’ clause

Внутри предложения with вы не можете вызвать конструктор или деструктор для объекта, который находится внутри этого предложения with.

Error: Cannot call message handler methods directly

Метод обработчика сообщений не может быть вызван напрямую, если он содержит явно аргумент Self.

Error: Jump in or outside of an exception block

Не допускается выполнять переход в или из блока обработки исключения, подобно этому: try..finally..end;. Например, следующий код приведёт к такой ошибке:

label 1;
...
try
 if not(final) then
   goto 1; // Эта строка вызовет ошибку
finally
 ...
end;
1:
...

Error: Control flow statements aren’t allowed in a finally block

Не допускается использовать операторы управления потоком, такие как break, continue и exit внутри оператора finally. Следующий пример показывает проблему:

...
try
p;
finally
...
exit; // Этот exit недопустим
end; ...

Если в процедуре p произойдёт исключение, то будет выполнен блок finally. Если выполнение подойдёт к exit, то будет непонятно, что делать – выходить из процедуры или искать другой обработчик исключения.

Warning: Parameters size exceeds limit for certain cpu’s

Это означает, что вы объявили больше чем 64К параметров, что не поддерживается данным целевым процессором.

Warning: Local variable size exceed limit for certain cpu’s

Это означает, что вы объявили больше чем 32К локальных переменных, что не поддерживается данным целевым процессором.

Error: Local variables size exceeds supported limit

Это означает, что вы объявили больше чем 32К локальных переменных, что не поддерживается этим процессором.

Error: BREAK not allowed

Вы пытаетесь использовать break вне тела цикла.

Error: CONTINUE not allowed

Вы пытаетесь использовать continue вне тела цикла.

Fatal: Unknown compilerproc «Сообщение». Check if you use the correct run time library.

Компилятор ожидает, что библиотека времени исполнения содержит некие подпрограммы. Если вы видите эту ошибку и вы не изменяли код библиотеки времени исполнения, то весьма вероятно, что библиотека времени исполнения не согласуется с компилятором. Если вы изменяли библиотеку времени исполнения, то это означает, что вы удалили подпрограмму, которая требуется компилятору.

Fatal: Cannot find system type «Сообщение». Check if you use the correct run time library.

Компилятор ожидает, что библиотека времени исполнения содержит некие определения типов. Если вы видите эту ошибку и вы не изменяли код библиотеки времени исполнения, то весьма вероятно, что библиотека времени исполнения не согласуется с компилятором. Если вы изменяли библиотеку времени исполнения, то это означает, что вы удалили определение типа, который требуется компилятору.

Hint: Inherited call to abstract method ignored

Это сообщение появляется только в режиме Delphi, если вы вызываете абстрактный метод родительского класса через наследование (через inherited;). Такой вызов игнорируется.

Error: Goto label «Сообщение» not defined or optimized away

Метка, использованная в определении goto, не определена или находится в коде слишком далеко.

Fatal: Cannot find type ”arg1” in unit ”arg2”. Check if you use the correct run time library.

The compiler expects that the runtime library contains certain type definitions. If you see this error and you didn’t change the runtime library code, it’s very likely that the runtime library you’re using doesn’t match the compiler in use. If you changed the runtime library this error means that you removed a type which the compiler needs for internal use.

Компилятор ожидает, что библиотека времени выполнения содержит некоторые определения типа. Если вы видите эту ошибку, и вы не измените код библиотека времени выполнения, это очень вероятно, что библиотека времени выполнения вы используете не соответствует компилятор в использовании. Если вы изменили библиотека времени выполнения эта ошибка означает, что вы удалили тип, который нуждается компилятор для внутреннего использования.

Error: Interprocedural gotos are allowed only to outer subroutines

Gotos between subroutines are only allowed if the goto jumps from an inner to an outer subroutine or from a subroutine to the main program

GOTOS между подпрограммами разрешается только при перейти прыжки с внутренней к внешней подпрограммы или из подпрограммы в основную программу

Error: Label must be defined in the same scope as it is declared

In ISO mode, labels must be defined in the same scope as they are declared.

В режиме ISO, этикетки должны быть определены в том же объеме, как они были объявлены.

Error: Leaving procedures containing explicit or implicit exceptions frames using goto is not allowed

Non-local gotos might not be used to leave procedures using exceptions either implicitly or explicitly. Procedures which use automated types like ansistrings or class constructurs are affected by this too.

Номера для местных GOTOS не могут быть использованы, чтобы оставить процедур с использованием исключений явно или неявно. Процедуры, которые используют автоматизированные типы как AnsiStrings или класса constructurs страдают от этого тоже.