Данный файл является частью Руководства по TADS для авторов игр.
Copyright © 1987, 1996 Майкл Дж. Робертс (Michael J. Roberts). Все права защищены.

Руководство было преобразовано в формат HTML Н. К. Гайем (N. K. Guy), компания tela design.

Перевод руководства на русский язык - Валентин Коптельцев


Приложение F


Сообщения об ошибках

В данном приложении описывается, как компилятор и интерпретатор реагируют на ошибки. Приводится также список сообщений об ошибках.


Ошибки и продолжение работы после них

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

При компиляции кода, например, внутри метода, TADS будет пытаться пропустить инструкцию, вызвавшую ошибку; иначе говоря, система просто будет искать точку с запятой, означающую окончание инструкции. Такой подход заведомо некорректен в том случае, если первопричиной ошибки как раз было отсутствие точки с запятой.

Если ошибка возникает при компиляции определений для объекта вне методов, TADS попытается целиком пропустить объект, в котором эта ошибка возникла. Компиляция будет возобновлена опять-таки после следующей точки с запятой. Наличие в пропускаемом объекте программного кода (методов) зачастую приводит к дополнительным ошибкам, которые обычно имеют вид "Expected object or function definition" (ожидается определение объекта или функции). Как правило, вы можете не обращать внимания на сообщения о подобных ошибках, если они выводятся друг за другом подряд - обычно достаточно будет исправить самую первую из них, поскольку остальные могут быть результатом попыток компилятора продолжить работу после нее. После того, как компилятору встретится определение следующего объекта или функции, он, как правило, перестает бомбардировать пользователя сообщениями об ошибках.


Категории ошибок

TADS различает четыре категории ошибок. Продолжение работы после ошибки осуществляется в зависимости от ее категории.

После фатальной ошибки продолжение работы компилятора невозможно. Как правило, такие ошибки вызываются отсутствием необходимых для работы файлов или недостатком памяти. После такой ошибки TADS прекращает работу.

Ошибка периода компиляции возникает, если компилятор обнаруживает проблему в исходном коде вашей игры - например, синтаксическую ошибку или недекларированную переменную/объект. После такой ошибки компилятор TADS пытается продолжить работу, пропустив участок кода, в котором эта ошибка возникла. Если в вашем исходном коде имеется хотя бы одна ошибка периода компиляции, вы не сможете запустить игру до тех пор, пока не устраните данную проблему (даже несмотря на то, что компилятор продолжит обработку исходного кода).

Предупреждение генерируется в случае, если компилятор обнаруживает сомнительную конструкцию и хочет привлечь к ней ваше внимание. Предупреждения сами по себе не оказывают влияния на ход компиляции; они выводятся исключительно для вашей информации. Вам желательно проверить каждое из таких предупреждений, чтобы убедиться, что за ними не стоит реальная проблема; только после такой проверки можно перестать обращать на них внимание.

Ошибка периода исполнения возникает, если ваша игровая программа в ходе своей работы пытается выполнить какое-либо некорректное действие (например, вычесть один объект из другого). Подобные ошибки не удается "отловить" на этапе компиляции, так как они зависят от конкретного состояния программы в ходе ее выполнения. Если при компиляции вы выбрали опцию включения отладочной информации, то TADS автоматически выведет информацию о том, какой метод или функция выполнялись в момент возникновения ошибки, из какого метода/функции они были вызваны и т. п. Если отладочная информация при компиляции была отключена, TADS сможет вывести только само сообщение об ошибке, без какой-либо дополнительной информации. После возникновения ошибки периода исполнения интерпретатор TADS попытается продолжить свою работу, прервав действия, которые выполнял в момент возникновения ошибки, и вернувшись к приглашению на ввод.


Список сообщений об ошибках

Ниже приведен список сообщений об ошибках, выдаваемых TADS (с переводом). Кроме того, дается краткое пояснение относительно причин, их вызывающих, а также рекомендации по их устранению.

Чтобы упростить вам поиск информации по возникшей проблеме, всем ошибкам присвоен уникальный код. Сообщение об ошибке предваряется этим кодом (например, "TADS-382"), который вы можете использовать для поиска в данном списке (список также упорядочен по коду ошибки).

TADS-1: out of memory (недостаточно памяти)

Программе не хватает оперативной памяти. Хотя TADS использует подсистему виртуальной памяти, позволяющую в значительной мере обходить ограничения оперативной памяти путем частичной выгрузки информации на диск, часть оперативной памяти резервируется TADS и не может быть выгружена. В ходе компиляции игры TADS может увеличивать виртуальный кэш объектов, при этом дополнительно резервируется и невыгружаемая память. Кэш может разрастись до таких размеров, что невыгружаемую память не удастся зарезервировать. В этом случае TADS прекращает работу, выдав данную ошибку. Если это случается, компилятор TADS также выводит информацию о размере виртуального кэша объектов; в таком случае следует перезапустить компиляцию, уменьшив значение для опции -m ("отвечающей" за размер объектного кэша).

TADS-2: error seeking in file (ошибка позиционирования в файле)

На уровне операционной системы возникла ошибка при позиционировании маркера доступа в файле. Обычно это означает внутреннюю проблему с TADS.

TADS-3: error reading from file (ошибка чтения из файла)

При чтении из файла возникла ошибка на уровне операционной системы. Как правило, это означает внутреннюю проблему с TADS.

TADS-4: no more page slots (не осталось ячеек для страниц памяти)

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

TADS-5: attempting to reallocate a locked object (попытка повторного выделения памяти под заблокированный объект)

Данная ошибка означает внутреннюю проблему с TADS.

TADS-6: swapfile limit reached - out of virtual memory (достигнут предельный объем файла подкачки - не хватает виртуальной памяти)

Достигнуто максимально допустимое значение объема файла подкачки, заданное вами при компиляции опцией -ts. Увеличьте это значение или откажитесь от использования данной опции.

TADS-7: error writing file (ошибка записи в файл)

На уровне операционной системы возникла ошибка записи в файл. Как правило, такая ошибка возникает, если диск переполнен. Попробуйте освободить место, удалив ненужные файлы, или используйте другой диск.

TADS-8: exceeded swap page table limit (превышен предельный таблицы выгружаемой страницы памяти)

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

TADS-9: requested client object number already in use (запрошенный номер пользовательского объекта уже используется)

Данная ошибка означает внутреннюю проблему с TADS.

TADS-10: client mapping table is full (пользовательская таблица трансляции переполнена)

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

TADS-11: no memory, even after swapping/garbage collection (не хватает памяти, несмотря на выгрузку на диск/удаление ненужных объектов)

Виртуальный объектный кэш переполнен или настолько фрагментирован, что не позволяет выделить необходимое количество памяти. Наиболее вероятный источник проблемы - недостаточный размер кэша; увеличение его объема (при помощи опции -m компилятора и соответствующих опций интерпретатора), как правило, позволяет ее решить.

TADS-12: no memory to resize (expand) an object (не хватает памяти для изменения (увеличения) размера объекта

Виртуальный объектный кэш переполнен. См. ошибку 11 выше.

TADS-13: unable to open swap file (невозможно открыть файл подкачки)

Не удается создать файл подкачки. Это может означать, что указано некорректное имя файла, либо что заданное устройство (том) не существует, либо что диск переполнен/защищен от записи.

TADS-14: can't get a new object header (невозможно получить заголовок нового объекта)

Подсистеме виртуальной памяти не хватает памяти. См. ошибку 11 выше.

TADS-15: mcm cannot find object to load (internal error) (менеджер кэша не может найти объект для загрузки (внутренняя ошибка))

Данная ошибка означает внутреннюю проблему с TADS.

TADS-16: attempting to free a locked object (internal error) (попытка освободить заблокированный объект (внутренняя ошибка))

Данная ошибка означает внутреннюю проблему с TADS.

TADS-100: invalid token (некорректный символ)

Ваш исходный файл содержит имя, которое TADS не может распознать.

TADS-101: end of file while scanning string (конец файла при просмотре строки)

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

TADS-102: symbol too long - truncated to "xxx" (имя слишком длинное - сокращено до "xxx")

Указанное в ошибке имя (идентификатор) слишком длинное. Обработка исходного кода будет продолжена, однако TADS будет рассматривать только усеченную версию данного имени.

TADS-103: no space in local symbol table (нет места в таблице локальных переменных)

Таблица локальных переменных переполнена. Объем выделяемой ей памяти можно увеличить при помощи опции -ml компилятора.

TADS-104: invalid preprocessor (#) directive (некорректная директива препроцессинга (#))

Указана неверная директива препроцессинга. Если в одной из строк файла с исходным кодом первым символом стоит решетка (#), компилятор ожидает, что это - начало директивы препроцессинга. Если это не так, выдается данная ошибка.

TADS-105: no filename in #include directive (не указан файл в директиве #include)

Вы определили директиву #include, не указав имени файла. Имя файла должно размещаться в той же строке, что и сама директива, и быть заключено в (двойные) кавычки или угловые скобки.

TADS-106: invalid #include syntax (неверный синтаксис директивы #include)

За собственно директивой #include в той же строке должно быть указано имя файла, заключенное в двойные кавычки или угловые скобки.

TADS-107: can't find included file "xxx" (не удалось найти включаемый файл "xxx")

Компилятору не удалось открыть файл, включаемый в исходный код при помощи директивы #include. Проверьте, что файл действительно располагается в одном из каталогов, заданных при помощи опции -i компилятора.

TADS-108: no matching delimiter in #include filename (не обнаружено замыкающего разделителя в имени файла в директиве #include)

Для имени файла в директиве #include не указана замыкающая двойная кавычка или угловая скобка (в зависимости от соответствующего открывающего символа).

TADS-109: out of space for symbol table expansion (не хватает памяти для увеличения таблицы определений)

Таблица определений не помещается в память. Поскольку эта таблица хранится в виртуальном объектном кэше, данная ошибка означает, что компилятору не хватает объема этого кэша.

TADS-110: input line is too long (слишком длинная строка)

Ваш исходный файл содержит слишком длинную строку. Компилятор может обрабатывать строки очень большой длины (примерно до 16'000 символов). При возникновении подобной ошибки разбейте проблемную строку на две или несколько меньшей длины.

TADS-111: warning: file "xxx" already included; #include ignored (предупреждение: файл "xxx" уже включен в исходный код - директива #include проигнорирована)

Указанный в директиве #include файл уже включен в исходный код и не будет включаться в него повторно. Такое сообщение чаще всего возникает при работе с предкомпилированными файлами; в подавляющем большинстве случаев на него можно не обращать внимания.

TADS-200: operation is too big for undo log (слишком объемное действие для журнала отмены)

Одно-единственное действие, выполненное в ходе игры, повлекло за собой изменения, превышающие по размеру журнал отмены. Все предыдущие записи в журнале отмены действий также будут аннулированы (иными словами, игра начнет вести журнал заново).

TADS-201: no more undo information (отсутствует информация для отмены)

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

TADS-202: incomplete undo (no previous savepoint) (неполная отмена - отсутствует предыдущая точка восстановления)

При попытке отката к предыдущей точке восстановления в журнале отмены действий кончилась информация. Результатом может стать неполностью отмененный ход.

TADS-300: expected token (ожидался символ)

Компилятору требуется указанный в сообщении символ/ключевое слово. Для исправления ошибки внесите этот символ в исходный код.

TADS-301: expected a symbol (ожидалось определение)

Компилятор ожидал, что в данном контексте последует определение (символ), но не обнаружил его.

TADS-302: expected a property name (ожидалось название свойства)

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

TADS-303: expected an operand (ожидался операнд)

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

TADS-304: expected a comma or closing paren (in arg list) (ожидалась запятая или замыкающая скобка (в списке аргументов))

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

TADS-305: no space for new parse node (не хватает памяти для нового узла синтаксического разбора)

Компилятору не хватает памяти для разбора выражения. Это иногда происходит при использовании очень длинных строк (в особенности если они содержат вычисляемые выражения). Используйте опцию -mp, чтобы увеличить количество памяти, используемой для разбора выражений.

TADS-306: expected object name (ожидался идентификатор объекта)

В данном контексте компилятор ожидал идентификатор объекта.

TADS-307: redefining symbol as external function (идентификатор переопределен в качестве внешней функции)

Идентификатор, уже определенный в программе, повторно определяется в качестве имени внешней функции.

TADS-308: redefining symbol as function (идентификатор переопределен в качестве функции)

Идентификатор, уже определенный в программе, повторно определяется в качестве имени функции.

TADS-309: can't use "class" with function/external function (Нельзя использовать директиву "class" с именем функции/внешней функции)

Вы использовали директиву class в определении функции/внешней функции, что запрещено (поскольку не имеет смысла).

TADS-310: unary operator required (требуется унарный оператор)

Ваше выражение требует унарного оператора (т. е. оператора, используемого с одним операндом, например, унарный минус или not).

TADS-311: binary operator required (требуется бинарный оператор)

Ваше выражение требует бинарного оператора (т. е. оператора, используемого с двумя операндами, например, * или and).

TADS-312: invalid binary operator (некорректный бинарный оператор)

Вы указали некорректный бинарный оператор.

TADS-313: invalid assignment (некорректное присваивание)

Вы использовали некорректное выражение с левой стороны оператора присваивания (:=). Использовать таким образом можно только локальные переменные, свойства объектов и элементы списков. В частности, некорректным будет присваивание значения некоему выражению (например, (1+1)).

TADS-314: variable name required (требуется имя переменной)

В данном контексте компилятор ожидает встретить имя переменной.

TADS-315: comma or semicolon required in local list (в списке локальных переменных ожидается запятая или точка с запятой)

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

TADS-316: right brace required (eof before end of group) (требуется правая скобка (конец файла до конца группы))

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

TADS-317: 'break' without 'while' ('break' без 'while')

Инструкция break может использоваться только с операторами while, for, do или switch-case. В вашем исходном коде встретилась инструкция break вне этих операторов.

TADS-318: 'continue' without 'while' ('continue' без 'while')

Инструкция continue может использоваться только внутри операторов while, for или do.

TADS-319: 'else' without 'if' ('else' без 'if')

Ваш файл содержит инструкцию else, расположенную вне оператора if. Обратите внимание, что первая версия TADS игнорировала точку с запятой между закрывающей фигурной скобкой и else; в версии 2 подобная точка с запятой рассматривается как завершение оператора if. Если ваша программа корректно компилировалась для версии 1, а при компиляции в TADS 2 возникает данная ошибка, имеет смысл использовать при компиляции опцию совместимости -1e.

TADS-320: warning: possible use of '=' where ':=' intended (предупреждение: возможно, используется '=' вместо ':=')

Компилятор обнаружил инструкцию, которая, как он "подозревает", является операцией присваивания с неправильно записанным оператором ("=" - оператор сравнения "равно" вместо ":=" - собственно оператор присваивания). В таких случаях компилятор почти никогда не ошибается; проверьте инструкцию, чтобы убедиться, что вы записали ее именно так, как хотели.

TADS-321: unexpected end of file (неожиданный конец файла)

Компилятор дошел до конца файла, в то время как с его точки зрения еще должен был оставался код для обработки. Скорее всего, такая ошибка является следствием забытой точки с запятой, завершающей определение объекта, либо замыкающей фигурной скобки в определении функции.

TADS-322: general syntax error (общая синтаксическая ошибка)

Компилятор обнаружил некорректную инструкцию.

TADS-323: invalid operand type (некорректный тип операнда)

Для одного из операндов в выражении не может быть применен заданный оператор. Чаще всего это означает некорректный тип значения константы/переменной, задействованной в выражении.

TADS-324: can't expand local symbol table (невозможно расширить таблицу локальных переменных)

Компилятору не удалось зарезервировать память для таблицы локальных переменных. Укажите для нее большее значение, используя опцию -ml компилятора.

TADS-325: can't expand argument symbol table (невозможно расширить таблицу аргументов)

Компилятору не удалось зарезервировать память для таблицы аргументов. Увеличьте область памяти под таблицу локальных переменных, используя опцию -ml компилятора.

TADS-326: redefining a function which is already defined (повторное определение существующей функции)

Вы указали два определения функции с одним и тем же названием.

TADS-327: 'case' or 'default' not in switch block ('case' или 'default' вне блока оператора switch)

Вы использовали ключевое слово case или default вне оператора switch.

TADS-328: constant required in switch case value (оператор switch-case требует использования констант)

"Переключатели" case в операторе switch должны использовать только постоянные значения. Такая ошибка возникает, если для case указать переменную или неконстантное выражение.

TADS-329: label required for 'goto' (для goto необходимо указать метку)

Вы не указали метки для инструкции goto либо указали для него вместо метки нечто, меткой не являющееся.

TADS-330: 'goto' label never defined (отсутствует определение метки для goto)

Метка, название которой указано для инструкции goto, не определена внутри функции или метода, где эта инструкция используется. Инструкция goto не может использоваться с метками, определенными за пределами своей "родной" функции/метода.

TADS-331: too many superclasses for object (для объекта определено слишком много родительских классов)

Вы определили слишком много родительских классов для объекта.

TADS-332: redefining symbol as object (попытка переопределить идентификатор в качестве объекта)

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

TADS-333: property being redefined in object (попытка переопределения свойства объекта)

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

TADS-334: invalid property value (некорректное значение свойства)

Заданное в определении объекта начальное значение его свойства некорректно.

TADS-335: invalid vocabulary property value (некорректное значение лексического свойства)

Для лексического свойства указано некорректное значение. Для таких свойств допустимо указывать только строковые (в одинарных кавычках) значения или списки таких значений.

TADS-336: invalid template property value (need string) (некорректное значение свойства, задающего название обработчика для глагола (должно быть строковым))

Указано неправильное значение для свойства глагола, определеяющего название метода-верификатора/метода-действия (речь идет о свойствах doAction, ioAction). Для данных свойств допустимо указывать только строковые значения (в одинарных кавчках).

TADS-337: template base property name too long (слишком длинное название обработчика)

Задано слишком длинное название метода-верификатора/метода-действия для глагола. Поскольку наименование того или иного метода образуется путем присоединения этого названия к префиксам do, verDo, io или verIo, то полное наименование метода может оказаться еще на пять символов длиннее.

TADS-338: too many templates (internal compiler limit) (задано слишком много свойств с названиями обработчиков (внутреннее ограничение компилятора))

Вы определили слишком много свойств - названий методов-верификаторов/действий для одного объекта.

TADS-339: invalid value for compound word (string required) (недопустимое значение для сочлененного слова (должно быть строковым))

Вы указали в определении сочлененной строки (compoundWord) значение, отличное от строкового.

TADS-340: invalid value for format string (string required) (недопустимое значение для форматной строки (должно быть строковым))

В определении форматной строки (formatString) вы указали значение, отличное от строкового.

TADS-341: invalid value for synonym (string required) (недопустимое значение синонима (должно быть строковым))

В определении глаголов-синонимов вы указали значение с типом, отличным от строкового.

TADS-342: undefined symbol (идентификатор не определен)

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

TADS-343: invalid value for specialWords list (string required) (недопустимое значение в списке specialWords (должно быть строковым))

Вы указали значение, отличное от строкового, в списке специальных слов.

TADS-400: object cannot grow any bigger - code too big (объект не может быть увеличен - код слишком объемный)

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

TADS-401: no more temporary labels/fixups (internal compiler limit) (не хватает временных меток/адресных привязок (внутреннее ограничение компилятора))

Компилятору не хватило памяти при генерации кода. Вам необходимо упростить ваш код (например, сократить уровень вложенности циклов и условных операторов).

TADS-402: (internal error) label never set ((внутренняя ошибка) метка не установлена)

Данная ошибка указывает на внутреннюю проблему TADS.

TADS-403: invalid datatype for list element (некорректный тип данных элемента списка)

Элемент списка имеет некорректный тип.

TADS-404: too many debugger source line records (internal limit) (слишком много строк кода отладочной информации (внутреннее ограничение))

В результате обработки вашей игровой программы было сгененрировано слишком много строк кода отладочной информации. Это связано с внутренним ограничением TADS, которое, впрочем, достаточно велико для того, чтобы эта ошибка не возникала.

TADS-450: vocabulary being redefined for object (для объекта переопределено лексическое свойство)

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

TADS-500: location of object "xxx" is not an object (свойство location объекта "xxx" - не объект)

Данное сообщение является предупреждающим. В большинстве случаев свойство location, "отвечающее" за местоположение объекта, должно напрямую ссылаться на другой объект, что позволяет системе автоматически синхронизировать списки содержимого объектов. Однако изредка бывает необходимо определить данное свойство как метод. Если вы сознательно пошли на такое решение, то, чтобы подавить вывод данного предупреждающего сообщения, надо добавить в определение объекта строку locationOK = true.

TADS-501: contents of object "xxx" is not list (свойство contents объекта "xxx" не является списком)

За исключением единичных случаев, когда вы абсолютно точно знаете, чего хотите достичь, определять свойство contents для объектов настоятельно не рекомендуется. Данное свойство отражает содержимое объекта и устанавливается системой автоматически как в процессе компиляции, так и в ходе выполнения игровой программы.

TADS-502: overflow trying to build contents list (переполнение при попытке создания списка содержимого)

Список, являющийся значением свойства contents некоего объекта, стал слишком большим и превысил внутреннее ограничение системы. Чтобы избежать данной ошибки, переместите часть содержащихся в объекте других объектов куда-нибудь еще.

TADS-503: required object "xxx" not found (обязательный объект "xxx" не найден)

В программе не определен "обязательный" объект (без которого компилятор не может создать файл игры).

TADS-504: warning - object "xxx" not found (предупреждение - объект "xxx" не найден)

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

TADS-505: too many built-in functions (internal error) (слишком много встроенных функций (внутренняя ошибка))

Данная ошибка указывает на внутреннюю проблему TADS.

TADS-600: unable to open game for writing (не удалось открыть файл игры для записи)

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

TADS-601: error writing to game file (ошибка записи в файл игры)

При записи в файл игры произошел сбой на уровне операционной системы. Как правило, это означает, что диск переполнен.

TADS-602: too many sc's for writing in fiowrt (слишком много sc для записи в fiowrt)

Данная ошибка указывает на внутреннюю проблему TADS.

TADS-603: undefined function "xxx" (функция "xxx" не определена)

Указанная функция была объявлена либо к ней было произведено обращение, однако при этом она не была определена.

TADS-604: undefined object "xxx" (объект "xxx" не определен)

К указанному объекту произошло обращение, однако объект не был определен.

TADS-605: undefined symbols found (обнаружены неопределенные идентификаторы)

В программе имеются идентификаторы, которым не соответствует определений (объектов, функций, переменных).

TADS-606: unable to open game for reading (не удалось открыть файл игры для чтения)

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

TADS-607: error reading game file (ошибка чтения файла игры)

При попытке чтения файла игры возник сбой на уровне операционной системы. Такое сообщение чаще всего является следствием того, что файл поврежден.

TADS-608: file has invalid header - not a TADS game file (неправильный заголовок файла - не является файлом игры TADS)

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

TADS-609: unknown resource type in .gam file (неизвестный тип ресурсов в файле .gam)

TADS-610: unknown object type in OBJ resource (неизвестный тип объекта в ресурсе OBJ)

Файл игры содержит некорректную информацию. Скорее всего, он поврежден.

TADS-611: file saved by different (incompatible) version (файл создан другой (несовместимой) версией)

Файл игры или файл сохранения был создан несовместимой с текущей версией TADS или игры соответственно. В зависимости от ситуации вам необходимо либо запустить игру под совместимой версией интерпретатора, либо перекомпилировать ее под текущий интерпретатор.

TADS-612: error loading object on demand (ошибка загрузки объекта по запросу)

Не удалось загрузить объект. Это может означать, что файл игры поврежден, либо что диск, на котором этот файл хранится, стал недоступен (например, вы извлекли из дисковода дискету, на которой хранился диск, или произошло отключение сетевого диска).

TADS-613: object too big for load region (internal error) (объект слишком велик для области загрузки (внутренняя ошибка))

TADS-614: did not expect external function (не ожидалась внешняя функция)

Данные ошибки указывают на внутренние проблемы TADS.

TADS-990: user requested cancel of current operation (пользователь прервал текущую операцию)

Вы прервали компиляцию игры (например, нажатием кнопки "Отмена" для компилятора под "Макинтош").

TADS-1001: stack overflow (переполнение стека)

В процессе выполнения программы произошло переполнение стека. Обычно это означает, что вследствие ошибки в программе она вошла в режим бесконечной рекурсии - т. е. некая функция/метод непрерывно вызывает сам(а) себя. Однако, если вы уверены, что в вашей программе ошибки нет, можно попробовать увеличить размер стека при помощи опции -ms программы-интерпретатора и протестировать игру еще раз.

TADS-1002: heap overflow (переполнение кучи)

При выполнении программы произошло переполнение объема памяти для "кучи" (память для динамически создаваемых объектов). Этот объем можно увеличить при помощи опции -mh программы-интерпретатора.

TADS-1003: numeric value required (требуется числовое значение)

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

TADS-1004: stack underflow (опустошение стека)

В ходе выполнения программа попыталась извлечь из стека больше элементов, чем в нем было. Обычно это означает, что произошел вывод функции с неправильным количеством аргументов (ошибка самой программы).

TADS-1005: logical value required (требуется логическое значение)

В ходе выполнения программы для действия, требующего логического значения (true или nil), было передано значение иного типа.

TADS-1006: invalid datatypes for magnitude comparison (некорректные типы данных для оператора сравнения)

В качестве операндов оператора сравнения (>, <, >= или <=) были использованы значения, не являющиеся строковыми или числовыми.

TADS-1007: string value required (требуется строковое значение)

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

TADS-1008: invalid datatypes for binary '+' operator (некорректный тип данных для бинарного оператора '+')

Допустимыми операндами для бинарного оператора сложения ("+") являются только значения строкового, списочного или числового типа.

TADS-1009: invalid datatypes for binary '-' operator (некорректный тип данных для бинарного оператора '-')

Допустимыми операндами для бинарного оператора вычитания ("-") являются только значения списочного или числового типа.

TADS-1010: object value required (требуется объектное значение)

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

TADS-1011: function pointer required (требуется ссылка на функцию)

В ходе выполнения программы для действия, требующего ссылки на функцию, было передано значение иного типа.

TADS-1012: property pointer value required (требуется ссылка на свойство)

В ходе выполнения программы для действия, требующего ссылки на свойство/метод объекта, было передано значение иного типа.

TADS-1013: 'exit' statement executed (выполнена инструкция 'exit')

TADS-1014: 'abort' statement executed (выполнена инструкция 'abort')

TADS-1015: 'askdo' statement executed (выполнена инструкция 'askdo')

TADS-1016: 'askio' executed; preposition is object #n (выполнена инструкция 'askio'; предлогом является объект #n)

TADS-1017: 'quit' executed (выполнена инструкция 'quit')

TADS-1018: 'reset' executed (выполнена инструкция 'reset')

Сообщения с 1013 по 1018 указывают на внутреннюю проблему TADS.

TADS-1020: list value required (требуется значение списочного типа)

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

TADS-1021: index value too low (must be >= 1) (слишком малое значение индекса (должно быть >= 1))

Произошла попытка обращения к элементу списка с указанием индекса меньше 1.

TADS-1022: index value too high (must be <= length(list)) (слишком большое значение индекса (должно быть <= длины списка))

При обращении к элементу списка был указан индекс, превышающий размер этого списка.

TADS-1023: invalid type for built-in function (некорректный тип для встроенной функции)

TADS-1024: invalid value for built-in function "xxx" (некорректное значение для встроенной функции xxx)

Ваша программа обратилась к встроенной функции, передав ей аргумент(ы) неправильного типа.

TADS-1025: wrong number of arguments to built-in (неверное количество аргументов для встроенной функции)

Ваша программа обратилась к встроенной функции, передав ей неверное число аргументов.

TADS-1026: wrong number of arguments to user function (неверное количество аргументов для пользовательской функции)

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

TADS-1027: string/list not allowed for fuse/daemon arg (нельзя использовать строковый/списочный аргумент для демона/запала)

Аргумент, передаваемый демону или запалу (инициируемому посредством функций setdaemon() и setfuse() соответственно), не может иметь строковый или списочный тип.

TADS-1028: internal error in setfuse/setdaemon/notify (внутренняя ошибка в setfuse/setdaemon/notify)

Данная ошибка указывает на внутреннюю проблему TADS.

TADS-1029: too many fuses (слишком много запалов)

Вы попытались зарегистрировать слишком много запалов одновременно (максимально возможное число активных запалов в игре на TADS - 100).

TADS-1030: too many daemons (слишком много демонов)

Вы попытались запустить слишком много демонов одновременно (максимально возможное число активных демонов в игре на TADS - 100).

TADS-1031: too many notifiers (слишком много методов-нотификаторов)

Вы попытались активировать слишком много демонов/запалов при помощи инструкции notify (максимально возможное число активных методов-нотификаторов в игре на TADS - 200).

TADS-1032: fuse not found in remfuse (указанный в remfuse запал не найден)

Вы попытались отключить запал при помощи функции remfuse, однако этот запал неактивен.

TADS-1033: daemon not found in remdaemon (указанный в remdaemon демон не найден)

Вы попытались отключить демон при помощи функции remdaemon, однако этот демон неактивен.

TADS-1034: notifier not found in unnotify (указанный в unnotify нотификатор не найден)

Вы попытались отключить метод-нотификатор (демон или запал) при помощи функции unnotify, однако этот метод неактивен.

TADS-1035: internal error in remfuse/remdaemon/unnotify (внутренняя ошибка в remfuse/remdaemon/unnotify)

TADS-1036: load-on-demand loop: property not being set (internal) (цикл загрузки по запросу: значение свойства не установлено (внутренняя ошибка))

Данные сообщения указывают на внутреннюю проблему TADS.

TADS-1037: undefined object in vocabulary tree (не определен объект в иерархии словаря)

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

TADS-1038: c-string conversion overflows buffer (internal limit) (при преобразовании нуль-терминированной строки произошло переполнение буфера (внутреннее ограничение))

Данное сообщение указывает на внутреннюю проблему TADS.

TADS-1039: invalid opcode (internal error) (некорректный код операции (внутренняя ошибка))

Данное сообщение указывает на внутреннюю проблему TADS или на повреждение файла игры.

TADS-1040: property evaluated for non-existent object (обращение к свойству несуществующего объекта)

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

TADS-1041: unable to load external function "xxx" (невозможно загрузить внешнюю функцию "xxx")

Указанная в программе внешняя функция недоступна, поскольку она не была добавлена к файлу игры при помощи корректного компилятора ресурсов (или другого механизма - в зависимости от операционной системы).

TADS-1042: error executing external function "xxx" (ошибка выполнения внешней функции "xxx")

Указанную в программе внешнюю функцию не удалось выполнить.

TADS-1043: circular synonym ("зацикленный" синоним)

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

TADS-1500: invalid command-line usage (некорректное использование командной строки)

Вы указали некорректные опции командной строки. Для этой ошибки всегда выводится информационное сообщение со списком доступных опций командной строки.

TADS-1501: error opening input file (ошибка открытия файла игры)

Отладчик не смог открыть указанный файл игры.

Примечание переводчика: здесь и далее речь идет об отдельной утилите-отладчике, использующейся при работе в DOS. В то же время TADS IDE для Windows зачастую выдает весьма сходные сообщения об ошибках.

TADS-1502: game not compiled for debugging - use -ds option (игра не скомпилирована для отладки - используйте опцию -ds)

Для того, чтобы запустить игру в режиме отладки, необходимо предварительно скомпилировать ее с использованием опции -ds или -ds2.

TADS-2000: error setting breakpoint: unknown symbol (ошибка установки точки останова: неизвестное определение)

Попытка установить точку останова на несуществующем определении.

TADS-2001: I'm afraid I can't do that, Dave (боюсь, что не могу сделать этого, Дейв)

Двери грузового отсека открыть не удалось. Проверьте блок AE-35 на предмет возможной неисправности.

Примечание переводчика: данное "сообщение об ошибке" вместе с описанием является шуточным отсылом к фильму "Космическая одиссея 2001 года" по одноименному роману Артура Кларка.

TADS-2002: error setting breakpoint: symbol is not a property (ошибка установки точки останова: определение не является свойством)

Указанное определение не является свойством.

TADS-2003: error setting breakpoint: symbol is not a function (ошибка установки точки останова: определение не является функцией)

Указанное определение не является функцией.

TADS-2004: error setting breakpoint: property not defined in object (ошибка установки точки останова: свойство не определено в объекте)

Указанное свойство не определено для указанного объекта.

TADS-2005: error setting breakpoint: property is not code (свойство не содержит кода)

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

TADS-2006: error: breakpoint is already set at this location (ошибка: в этом месте уже установлена точка останова)

Вы попытались установить более одной точки останова в одном и том же месте.

TADS-2007: error setting breakpoint: breakpoint not at line (ошибка установки точки останова: точка вне кода)

Вы попытались установить точку останова в месте, не соответствующем строке исходного кода.

TADS-2008: too many breakpoints (слишком много точек останова)

Достигнуто максимальное количество точек останова, которые можно установить в отладчике. Необходимо удалить одну или более точек останова из числа установленных ранее.

TADS-2009: breakpoint was not set (точка останова не была установлена)

Не удалось установить точку останова в месте, указанном пользователем.

TADS-2010: too many symbols in eval expression (internal limit) (слишком много символов в выражении для контрольного вычисления)

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

TADS-2011: unable to find source file "xxx" (файл с исходным кодом "xxx" не найден)

Указанный файл с исходным кодом игры открыть не удалось.

TADS-2012: assignment to local is illegal in watch expression (присваивать значение локальной переменной в просматриваемом выражении недопустимо)

В просматриваемых выражениях нельзя осуществлять присваивание значения локальной переменной.

TADS-2013: inactive frame (expression value not available) (область действия неактивна (невозможно вычислить значение выражения))

Получить значения выражения невозможно, поскольку область его действия более неактивна. (Например, в выражении присутствует локальная переменная, но в ходе выполнения программы функция, в которой она определена, завершила работу).

TADS-2014: too many watch expressions (слишком много просматриваемых выражений)

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

TADS-2015: watch expression not set (просматриваемое выражение не определено)

Указанное пользователем просматриваемое выражение определить не удалось.

TADS-2016: extraneous text after end of command (посторонний текст после конца команды)

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

TADS-2017: error setting breakpoint: symbol is not an object (ошибка установки точки останова: определение не является объектом)

Указанное определение не является объектом.





Книга бывает занимательна, несмотря на бесчисленные ошибки, и скучна, хоть в ней не найдется ни единой несообразности.
ОЛИВЕР ГОЛДСМИТ (OLIVER GOLDSMITH), Векфильдский священник (1766)


Приложение E Содержание Приложение G