OberonCore
https://forum.oberoncore.ru/

Баг компилятора - передача в VAR-параметр не-lvalue.
https://forum.oberoncore.ru/viewtopic.php?f=127&t=6081
Страница 1 из 1

Автор:  Илья Ермаков [ Пятница, 07 Июль, 2017 05:57 ]
Заголовок сообщения:  Баг компилятора - передача в VAR-параметр не-lvalue.

Тест:

Код:
MODULE Test;
   
   TYPE
      Obj = POINTER TO RECORD END;

   PROCEDURE Fun (): ANYPTR;
      VAR obj: Obj;
   BEGIN
      NEW(obj);
   RETURN obj
   END Fun;

   PROCEDURE Proc (VAR p: Obj);
   BEGIN
      p := NIL
   END Proc;

   PROCEDURE Do*;
   BEGIN
      Proc(Fun()(Obj))
   END Do;
   
END Test.

(!)Test.Do


Компилятор пропускает.
При выполнении TRAP: illegal instruction: E850C08DH

А вот так уже компилятор отсекает:
Код:
MODULE Test;
   
   TYPE
      Obj = POINTER TO RECORD END;

   PROCEDURE Fun (): [b]Obj;[/b]
      VAR obj: Obj;
   BEGIN
      NEW(obj);
   RETURN obj
   END Fun;

   PROCEDURE Proc (VAR p: Obj);
   BEGIN
      p := NIL
   END Proc;

   PROCEDURE Do*;
   BEGIN
      Proc(Fun()(Obj))
   END Do;
   
END Test.

(!)Test.Do

Автор:  Comdiv [ Пятница, 07 Июль, 2017 11:31 ]
Заголовок сообщения:  Re: Баг компилятора - передача в VAR-параметр не-lvalue.

Код:
PROCEDURE Fun (): [b]Obj;[/b]

С первого взгляда не понял, чем являются эти нововведния в языке.

Автор:  Илья Ермаков [ Пятница, 07 Июль, 2017 18:48 ]
Заголовок сообщения:  Re: Баг компилятора - передача в VAR-параметр не-lvalue.

Да, форум жирности в [code] не понимает.

Автор:  Oleg N. Cher [ Суббота, 08 Июль, 2017 03:57 ]
Заголовок сообщения:  Re: Баг компилятора - передача в VAR-параметр не-lvalue.

А интересно, что должен выделить NEW(obj), если obj имеет тип POINTER TO RECORD END ? Это же запись пустая, без данных.

Проверил в Ofront'е, но там нет типа ANYPTR, а с SYSTEM.PTR вместо него не проходит компиляцию. А в CPfront компиляцию проходит, так что там тот же баг. Но CPfront использует часть кода компилятора BlackBox.

Вложения:
Ofront.png
Ofront.png [ 60.24 КБ | Просмотров: 7474 ]

Автор:  Илья Ермаков [ Понедельник, 10 Июль, 2017 14:25 ]
Заголовок сообщения:  Re: Баг компилятора - передача в VAR-параметр не-lvalue.

Насколько я помню, у тега типа будет size = 0, а уже менеджер памяти при выделении округлит размер блока в какую-то большую сторону.

Автор:  maliya [ Среда, 19 Июль, 2017 03:40 ]
Заголовок сообщения:  Re: Баг компилятора - передача в VAR-параметр не-lvalue.

I have posted this issue to the bbCenter,
a fixup is out https://forum.blackboxframework.org/viewtopic.php?f=40&t=645
welcome check and feedback.
luowy

Автор:  prospero78 [ Понедельник, 31 Июль, 2017 14:13 ]
Заголовок сообщения:  Re: Баг компилятора - передача в VAR-параметр не-lvalue.

Размер покажет ноль. Но фактически объект будет иметь размер, так как:
1. Счётчик ссылок
2. Тип
3. Указатель на родителя.

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/