Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Показано с 1 по 7 из 7

Тема: __emit и const.*

  1. #1
    Аватар для vvw
    Пользователь

    Статус
    Оффлайн
    Регистрация
    09.08.2019
    Сообщений
    45
    Репутация:
    9 ±

    __emit и const.*

    При работе данного оператора в макросах нельзя узнать адрес переданной переменной через инструкцию const.*

    1. #define Foo(%0) \
    2.   (__emit(const.pri (%0)))
    3. main() {
    4. new bar;
    5. printf("%x\n", Foo(bar));
    6. }


    Выдает ошибку:
    Код:
    error 008: must be a constant expression; assumed zero
    Есть другие способы получить адрес переменной?

  2. #2
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2590 ±
    Есть инструкция addr.pri/alt, с помощью которой можно получить адрес локальной переменной. Если же нужна универсальность под любые типы переменных (т.е. как стековые, так и в секции данных), этим летом я добавил несколько псевдоинструкций как раз для использования в макросах - конкретно в данной ситуации понадобится addr.u.pri/alt.

    К сожалению, чтобы использовать новые псевдоинструкции, придётся дождаться следующего релиза компилятора.
    Или можно просто включить режим бога разработчика и собрать компилятор из последних исходников.
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  3. #3
    Аватар для vvw
    Пользователь

    Статус
    Оффлайн
    Регистрация
    09.08.2019
    Сообщений
    45
    Репутация:
    9 ±
    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение
    Есть инструкция addr.pri/alt, с помощью которой можно получить адрес локальной переменной. Если же нужна универсальность под любые типы переменных (т.е. как стековые, так и в секции данных), этим летом я добавил несколько псевдоинструкций как раз для использования в макросах - конкретно в данной ситуации понадобится addr.u.pri/alt.

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

    p.s. ссылка не открывается.

  4. #4
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2590 ±
    Цитата Сообщение от vvw Посмотреть сообщение
    ссылка не открывается.
    Исправил (как в своём посте, так и в твоей цитате).

    Цитата Сообщение от vvw Посмотреть сообщение
    ... а до следующего релиза неизвестно сколько времени пройдет, ибо они сами еще не решили, когда он будет.
    Попробуй с вопросом о релизе потерроризировать их через багтрекер (issues). Я бы и сам спросил, но в последнее время складывается ощущение, будто меня там просто игнорируют (вполне возможно, что из-за той пары PR, которые им не понравились).

    UPD: И да, если что, на днях ключевое слово emit удалили, оставив только __emit.
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  5. #5
    Аватар для vvw
    Пользователь

    Статус
    Оффлайн
    Регистрация
    09.08.2019
    Сообщений
    45
    Репутация:
    9 ±
    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение
    Исправил (как в своём посте, так и в твоей цитате).


    Попробуй с вопросом о релизе потерроризировать их через багтрекер (issues). Я бы и сам спросил, но в последнее время складывается ощущение, будто меня там просто игнорируют (вполне возможно, что из-за той пары PR, которые им не понравились).
    Пора открывать свою редакцию pawn-lang. Из-за каких PR?

    P.S. есть ли способ восстановления аккаунта на pro-pawn.ru?

    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение
    UPD: И да, если что, на днях ключевое слово emit удалили, оставив только __emit.
    Это логично, потому что emit не является задокументированным ключевым словом. Я уже и не помню, почему мы добавили emit.
    Последний раз редактировалось vvw; 12.11.2019 в 11:00.

  6. #6
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2590 ±
    Цитата Сообщение от vvw Посмотреть сообщение
    Из-за каких PR?
    https://github.com/pawn-lang/compiler/pull/455
    https://github.com/pawn-lang/compiler/pull/456
    Возможно, мне стоило сначала создать issue и обсудить соответствующие изменения, но на тот момент хотелось сразу предоставить proof of concept, чтобы можно было сразу испытать новые фичи. Как оказалось, зря.


    Цитата Сообщение от vvw Посмотреть сообщение
    Это логично, потому что emit не является задокументированным ключевым словом.
    Дело не столько в документировании, сколько в том, что название просто не начинается с "__", как у других новых ключевых слов (до релиза 3.10.9 это был только оператор __emit, в предстоящем релизе добавлен __addressof + в очереди на принятие __nameof).


    Цитата Сообщение от vvw Посмотреть сообщение
    P.S. есть ли способ восстановления аккаунта на pro-pawn.ru?
    Да, подтверждением через почтовый ящик, на который зарегистрирован аккаунт. Либо отпишись в ЛС: задам пару вопросов, чтобы убедиться, что ты - это точно ты, и объединю этот твой аккаунт со старым.
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  7. #7
    Аватар для vvw
    Пользователь

    Статус
    Оффлайн
    Регистрация
    09.08.2019
    Сообщений
    45
    Репутация:
    9 ±
    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение
    https://github.com/pawn-lang/compiler/pull/455
    https://github.com/pawn-lang/compiler/pull/456
    Возможно, мне стоило сначала создать issue и обсудить соответствующие изменения, но на тот момент хотелось сразу предоставить proof of concept, чтобы можно было сразу испытать новые фичи. Как оказалось, зря.

    Да, стоило сделать issue. А вообще "continue enum" - довольно странный синтаксис. Лучше было бы профорсить тему с аттрибутами, в которую можно было бы сделать данный функционал.

    1. enum bar {
    2. a,b,c
    3. };
    4.  
    5. enum bar __attribute__(continue) {
    6. d,e,f
    7. };



    Сейчас сделаю функцию рандомного switch, тогда точно можно будет сказать, что я - я. =)
    Последний раз редактировалось vvw; 13.11.2019 в 11:23.

 

 

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •