Добавлен , опубликован

ZINC

Содержание:

Что было не упомянуто.

Текстовые макросы

К лучшему или худшему, Zinc наследует препроцессор макросов vJass, например команды external и loaddata. Но что важнее - textmacro. Итак, текстовые макросы Zinc работают точно так же как в vJass.

Ошибки ошибок компиляции

JassHelper, это препроцессор в несколько этапов. Порядок его работы следующий:
  • импорт/novjass участки/комментарии
  • текстовые макросы
  • Zinc
  • Библиотеки
  • Статичные условия (static if)
  • Модули
  • Структуры и прочая блажь
  • PJass
  • Shadowhelper
  • PJass
  • Оптимизация (inline)
Каждый этап получает разные данные, которые являются результатом работы предыдущего этапа. Этап импорта выполняет поиск и объединение всех файлов в один общий (и это здорово, поскольку этапы макросов, Zinc и библиотек работают впоследствии с одним и тем же файлом (что подразумевает ясность для пользователя (за одним исключением - никто не скажет, в каком именно файле была найдена ошибка)).
Проблема начинается дальше. Несмотря на то что этапы модулей и структур работают с одним и тем же входным файлом, остальные этапы используют разные файлы и как следствие показывают ошибку в разной форме. Для vJass это не проблема, поскольку отображаемый код с найденным в нем ошибкой не отличается от того, что вы писали. Проблема в Zinc, поскольку в результате обработки, вы увидите сообщение об ошибке в виде какого-то vJass кода, конкретно отличающемся от того, что вы писали на Zinc. Такое поведение парсера чрезвычайно недружелюбно, посему имейте это в виду.

Чистка комментариев

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

Как компилируется цикл while?

Теперь о хорошем. Стандартный цикл Jass подразумевает выход из цикла, в случае если выражение после exitwhen принимает значение true. Однако, порой компилятор совершает некоторую магию, дабы условное выражение не занимало много пространства или времени на выполнение. Например, вместо преобразования (a==b) в not (a==b), результатом обработки будет (a!=b). Конечно, бывает что логическое выражение слишком сложное для обработки и добавление not обходится дешевле.

`
ОЖИДАНИЕ РЕКЛАМЫ...