Добавлен GetLocalPlayer,
опубликован
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 обходится дешевле.
Содержание
`
ОЖИДАНИЕ РЕКЛАМЫ...
Комментарии пока отсутcтвуют.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.