Добавлен
Ловлю неприятный баг с define.
Как его можно вылечить?
>integer a=A(1 2 3 4 5 6 7 8 9)
Critical error: too many arguments passed to define.
карта
код
define {
  def1(Z) = {}
  def2(Z) = {}
  def3(Z) = {}
  def4(Z) = {}
  def5(a) = {}
  def5(a) = {}
  def6(a) = {}
  def7(a) = {}
  def8(a) = {}
  def9(N) = {}
}

nothing g123() {
  integer a = A(1,2,3,4,5,6,7,8,9)
}

define {
  A(a,t1) = 1
  A(a,t1,t2) = 2
  A(a,t1,t2,t3) = 3
  A(a,t1,t2,t3,t4) = 4
  A(a,t1,t2,t3,t4,t5) = 5
  A(a,t1,t2,t3,t4,t5,t6) = 6
  A(a,t1,t2,t3,t4,t5,t6,t7) = 7
  A(a,t1,t2,t3,t4,t5,t6,t7,t8) = 8
}
Ошибки нет:
карта
код
define {
  A(a,t1) = 1
  A(a,t1,t2) = 2
  A(a,t1,t2,t3) = 3
  A(a,t1,t2,t3,t4) = 4
  A(a,t1,t2,t3,t4,t5) = 5
  A(a,t1,t2,t3,t4,t5,t6) = 6
  A(a,t1,t2,t3,t4,t5,t6,t7) = 7
  A(a,t1,t2,t3,t4,t5,t6,t7,t8) = 8
}

  nothing g123() {
    integer a = A(1,2,3,4,5,6,7,8,9)
  }

Принятый ответ

Проверил отладчиком - все сложно. Подсказать вряд-ли что-то смогу.

Там судя по всему неправильно срабатывает сортировка перегруженных макросов, они должны в своей таблице располагаться по количеству аргументов, а располагаются они черти как. При этом если оставить одно или два определения типа def1 - все сохраняется.
`
ОЖИДАНИЕ РЕКЛАМЫ...
0
28
5 лет назад
0
Не думаю, cJass давно никто не обновлял. Можешь попробовать перед каждый написать define.
0
17
5 лет назад
0
Можешь попробовать перед каждый написать define.
Это не помогло.

Сейчас баг ставит ограничение на количество дефайнов на карте. В данном примере достаточно десяти. Или придется вовсе отказаться от таких перегрузок.
С другой стороны, в cj_print.j есть перегрузки с 18 аргументами.
0
28
5 лет назад
0
Vlod, лучше напиши adic3x (создатель cJass), может, он чем подсобит.
0
33
4 года назад
Отредактирован adic3x
0
Проверил отладчиком - все сложно. Подсказать вряд-ли что-то смогу.

Там судя по всему неправильно срабатывает сортировка перегруженных макросов, они должны в своей таблице располагаться по количеству аргументов, а располагаются они черти как. При этом если оставить одно или два определения типа def1 - все сохраняется.
Принятый ответ
Чтобы оставить комментарий, пожалуйста, войдите на сайт.