OberonCore
https://forum.oberoncore.ru/

Ошибка компилятора: семантика IN
https://forum.oberoncore.ru/viewtopic.php?f=131&t=3919
Страница 1 из 1

Автор:  Илья Ермаков [ Вторник, 03 Апрель, 2012 09:43 ]
Заголовок сообщения:  Ошибка компилятора: семантика IN

Вот это работает, хотя должно давать ошибку на этапе компиляции:

Код:
MODULE Test;

   TYPE
      A = RECORD
         x: INTEGER
      END;

   PROCEDURE (VAR a: A) SetX (x: INTEGER), NEW;
   BEGIN
      a.x := x
   END SetX;

   PROCEDURE SetX (IN a: A);
   BEGIN
      a.SetX(1000)
   END SetX;

   PROCEDURE DoSetX*;
      VAR a: A;
   BEGIN
      SetX(a);
      HALT(0)
   END DoSetX;

END Test.

Автор:  Александр Ильин [ Вторник, 03 Апрель, 2012 10:48 ]
Заголовок сообщения:  Re: Ошибка компилятора: семантика IN

Илья Ермаков писал(а):
Вот это работает, хотя должно давать ошибку на этапе компиляции
Не вижу проблемы. В чём по-вашему ошибка?
Неужели у IN-рекордов нельзя вызывать методы?

Автор:  Евгений Темиргалеев [ Вторник, 03 Апрель, 2012 11:36 ]
Заголовок сообщения:  Re: Ошибка компилятора: семантика IN

Код:
MODULE Test;

   TYPE
      A = RECORD
         x: INTEGER
      END;

   PROCEDURE (VAR a: A) Set2 (x: INTEGER), NEW;
   BEGIN
      a.x := x
   END Set2;

   PROCEDURE (IN a: A) Set1 (x: INTEGER), NEW;
   BEGIN
      a.Set2(x)   (* нет ошибки *)
   END Set1;

   PROCEDURE Set2 (VAR a: A; x: INTEGER);
   BEGIN
      a.x := x
   END Set2;

   PROCEDURE Set1 (IN a: A; x: INTEGER);
   BEGIN
      Set2(a(* X = this variable (field) is read only *), x)
   END Set1;

END Test.

Автор:  Александр Ильин [ Вторник, 03 Апрель, 2012 13:03 ]
Заголовок сообщения:  Re: Ошибка компилятора: семантика IN

Евгений Темиргалеев писал(а):
Set2(a(* X = this variable (field) is read only *), x)
Так гораздо понятнее, спасибо!
INconsistency.

Автор:  Oleg N. Cher [ Пятница, 28 Февраль, 2014 18:59 ]
Заголовок сообщения:  Re: Ошибка компилятора: семантика IN

Исправление предложено Wening Luo в рассылке по ББ сегодня:

Эта ошибка не исправлена в BB 1.6. Думаю, все сборки ББ должны включать этот фикс:

https://github.com/Oleg-N-Cher/BB-XDev/commit/d4418a62f2d5321ca91f5df0eb8a948470f77c50

Автор:  Пётр Кушнир [ Пятница, 28 Февраль, 2014 19:13 ]
Заголовок сообщения:  Re: Ошибка компилятора: семантика IN

Непонятно поведение расширенных записей, если вызвать .Set у скрытой реализации, то отслеживание ошибки должно быть еще и в рантайме.
Ну и в целом, я же специально написал этот метод, чтобы менять скрытую переменную, в чем проблема?

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