Автор Тема: Чем Вирту WITH не угодил?  (Прочитано 87048 раз)

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: Чем Вирту WITH не угодил?
« Ответ #195 : Май 05, 2012, 03:50:23 pm »
Проверил ETH Oberon (эмулятор под винду)

Вру. Это не эмулятор, а порт. Т.е. компилер там не виртовский, а OP2

Kemet

  • Hero Member
  • *****
  • Сообщений: 587
    • Просмотр профиля
Re: Чем Вирту WITH не угодил?
« Ответ #196 : Май 05, 2012, 03:58:15 pm »
Пока нет времени вдумчиво исследовать исходники компилятора КП из ЧЯ1.6Ю но, просмотрев с десяток строк кода я увидел такую интересную конструкцию
(id -  это охраняемая переменная)
  IF (id # NIL) & (id.typ.form = Pointer) & ((id.mode = VarPar) OR ~id.leaf) THEN
    err(-302) (* warning 302 *)
END ;

Kemet

  • Hero Member
  • *****
  • Сообщений: 587
    • Просмотр профиля
Re: Чем Вирту WITH не угодил?
« Ответ #197 : Май 05, 2012, 04:02:55 pm »
Проверил ETH Oberon (эмулятор под винду)

Вру. Это не эмулятор, а порт. Т.е. компилер там не виртовский, а OP2
а КП основан на ОП2 со всеми вытекающими

Kemet

  • Hero Member
  • *****
  • Сообщений: 587
    • Просмотр профиля
Re: Чем Вирту WITH не угодил?
« Ответ #198 : Май 05, 2012, 04:13:23 pm »
Пока нет времени вдумчиво исследовать исходники компилятора КП из ЧЯ1.6Ю но, просмотрев с десяток строк кода я увидел такую интересную конструкцию
(id -  это охраняемая переменная)
  IF (id # NIL) & (id.typ.form = Pointer) & ((id.mode = VarPar) OR ~id.leaf) THEN
    err(-302) (* warning 302 *)
END ;
Как мне кажется, здесь, по логике, должен стоять запрет на передачу в WITH var pointer, т.е. компилятор должен дать нам по рукам, но не дает, значит условие не выполняется...

Kemet

  • Hero Member
  • *****
  • Сообщений: 587
    • Просмотр профиля
Re: Чем Вирту WITH не угодил?
« Ответ #199 : Май 05, 2012, 04:26:10 pm »
Я не знаю как перекомпилить ЧЯ, может кто-нибудь посмотреть, что в id.typ.form
и id.mode при передаче var pointer - это в CPP строка 1451

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re: Чем Вирту WITH не угодил?
« Ответ #200 : Май 05, 2012, 04:39:18 pm »
Я не знаю как перекомпилить ЧЯ, может кто-нибудь посмотреть, что в id.typ.form
и id.mode при передаче var pointer - это в CPP строка 1451
На всякий случай напоминаю, что исходники ББ есть онлайн - см. шапку форума:
Цитировать
Онлайн исходники BlackBox: тут:WeBB и на github
Может быть удобным при обсуждении.
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re: Чем Вирту WITH не угодил?
« Ответ #201 : Май 05, 2012, 04:41:14 pm »
Я не знаю как перекомпилить ЧЯ, может кто-нибудь посмотреть, что в id.typ.form
и id.mode при передаче var pointer - это в CPP строка 1451
На всякий случай напоминаю, что исходники ББ есть онлайн - см. шапку форума:
Цитировать
Онлайн исходники BlackBox: тут:WeBB и на github
Может быть удобным при обсуждении.
В частности на интуресующую строку можно было просто дать ссылку.
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

Kemet

  • Hero Member
  • *****
  • Сообщений: 587
    • Просмотр профиля
Re: Чем Вирту WITH не угодил?
« Ответ #202 : Май 05, 2012, 04:51:42 pm »
В частности на интуресующую строку можно было просто дать ссылку.
Там она 1438.

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: Чем Вирту WITH не угодил?
« Ответ #203 : Май 05, 2012, 05:08:37 pm »
А вот это любопытно...

Цитата: List of Oberon Error Numbers
...
3. Warnings
...
302   guarded variable can be side-effected
...

Kemet

  • Hero Member
  • *****
  • Сообщений: 587
    • Просмотр профиля
Re: Чем Вирту WITH не угодил?
« Ответ #204 : Май 05, 2012, 05:18:40 pm »
А вот это любопытно...

Цитата: List of Oberon Error Numbers
...
3. Warnings
...
302   guarded variable can be side-effected
...
Так я и говорю, что проблема не в WITH, а в другом месте.
Получается, что они, всё-таки, потеряли информацию о том, что это ссылка, и условие не выполнилось.
Всё-ж таки надо вывод участвующих в вычислении условия переменных, может кто-то сделать? Но, подозреваю, VarPar не установлен

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: Чем Вирту WITH не угодил?
« Ответ #205 : Май 05, 2012, 05:30:41 pm »
Все там работает как надо. Это не логика компиляции, а просто предупреждение.

Меня вот интересует почему оно на экран не выводится. Код этот срабатывает в нашем случае (я проверил)

Вывод предупреждений видимо по дефолту выключен. Где это включить пока в упор не вижу...

Kemet

  • Hero Member
  • *****
  • Сообщений: 587
    • Просмотр профиля
Re: Чем Вирту WITH не угодил?
« Ответ #206 : Май 05, 2012, 05:37:30 pm »
Все там работает как надо. Это не логика компиляции, а просто предупреждение.

Меня вот интересует почему оно на экран не выводится. Код этот срабатывает в нашем случае (я проверил)

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

Kemet

  • Hero Member
  • *****
  • Сообщений: 587
    • Просмотр профиля
Re: Чем Вирту WITH не угодил?
« Ответ #207 : Май 05, 2012, 05:43:25 pm »
Вывод предупреждений видимо по дефолту выключен. Где это включить пока в упор не вижу...

CPM PROCEDURE Mark*
забавно там

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: Чем Вирту WITH не угодил?
« Ответ #208 : Май 05, 2012, 05:44:36 pm »
Вот процедура из модуля DevCPM, которая собирает ошибки:
   
PROCEDURE Mark* (n, pos: INTEGER);
   BEGIN
      (*StdLog.Int(n);*)
      IF (n >= 0) & ~((oberon IN options) & (n >= 181) & (n <= 190)) THEN
         noerr := FALSE;
         IF pos < 0 THEN pos := 0 END;
         IF (pos < lastpos) OR (lastpos + 9 < pos) THEN
            lastpos := pos;
            IF errors < maxErrors THEN
               errNo[errors] := n; errPos[errors] := pos
            END;
            INC(errors)
         END;
         IF trap IN options THEN HALT(100) END;
      ELSIF (n <= -700) & (errors < maxErrors) THEN
         errNo[errors] := -n; errPos[errors] := pos; INC(errors)
      END
   END Mark;


Ошибка с кодом -302 тупо игнорится...

p.s. Жирным выделена моя вставка

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: Чем Вирту WITH не угодил?
« Ответ #209 : Май 05, 2012, 05:46:06 pm »
забавно там

Ага  ;D

Они знали....
« Последнее редактирование: Май 05, 2012, 05:47:38 pm от ilovb »