Страница 1 из 2

Clarion 7 - 8 разных сборок а проблема одна

Добавлено: 20 Май 2011, 12:05
beholder
ROUTINE that can RETURN from procedure cannot be called here а в 5 и 6 все отлично

Re: Clarion 7 - 8 разных сборок а проблема одна

Добавлено: 20 Май 2011, 14:40
Дед Пахом
Компилятор стал жёстче.

Re: Clarion 7 - 8 разных сборок а проблема одна

Добавлено: 20 Май 2011, 16:04
beholder
засранец он, а не компилятор

Re: Clarion 7 - 8 разных сборок а проблема одна

Добавлено: 20 Май 2011, 18:28
Дед Пахом

Код: Выделить всё

R  ROUTINE
  RETURN

P1  PROCEDURE
  CODE
  P2()
  DO R

P2  PROCEDURE
  CODE
  DO R
хрен знает, из P1 или из P2 мы выйдем по RETURN?

Re: Clarion 7 - 8 разных сборок а проблема одна

Добавлено: 21 Май 2011, 10:38
Admin
Дед Пахом писал(а):

Код: Выделить всё

R  ROUTINE
  RETURN

P1  PROCEDURE
  CODE
  P2()
  DO R

P2  PROCEDURE
  CODE
  DO R
хрен знает, из P1 или из P2 мы выйдем по RETURN?
Здесь хрень написал... не по правилам клаши... :)
Должно быть так:

Код: Выделить всё

        PROGRAM
        MAP
P1        PROCEDURE
P2        PROCEDURE
        END

  CODE
  P1

P1        PROCEDURE
  CODE
  P2()
  DO R

R         ROUTINE
  MESSAGE('ROUTINE 1')   
  RETURN

P2        PROCEDURE
  CODE
  DO R        

R         ROUTINE
  MESSAGE('ROUTINE 2')
  RETURN
Месаги появятся в порядке
ROUTINE 2
ROUTINE 1
Все работает аналогично и в C6 и в C8, о чем спич господа?

Re: Clarion 7 - 8 разных сборок а проблема одна

Добавлено: 21 Май 2011, 11:59
Дед Пахом
Admin писал(а): Здесь хрень написал... не по правилам клаши... :)
Я приблизительно ;-) Вобщем, при каких-то условиях/комбинациях компилятор не может однозначно определить, куда по return выходить.

Re: Clarion 7 - 8 разных сборок а проблема одна

Добавлено: 23 Май 2011, 12:35
morkovin
Тоже получил эту ошибку
ROUTINE that can RETURN from procedure cannot be called here
И что-где подправить?

Re: Clarion 7 - 8 разных сборок а проблема одна

Добавлено: 23 Май 2011, 14:42
Дед Пахом
Совет давали такой: завести флаг Loc:Return, в рутине заменить RETURN на "Loc:Return=True; EXIT", в процедуре после DO Routine "IF Loc:Return=True THEN RETURN END". Кстати, RETURN может быть в одной из вложенных рутин, не обязательно в той, на которую указывает ошибка.

Re: Clarion 7 - 8 разных сборок а проблема одна

Добавлено: 23 Май 2011, 15:51
morkovin
Спасибо!
в рутине заменить RETURN на "Loc:Return=True; EXIT",
во вложенных рутинках по-тупому заменил RETURN на EXIT и все откомпилировалось и заработало.

Re: Clarion 7 - 8 разных сборок а проблема одна

Добавлено: 24 Май 2011, 20:45
beholder
:) действительно замена return на exit решает данную ситуацию. Спасибо !!!!!!!!!!!!!!!!!!!!!!!!!!!

Re: Clarion 7 - 8 разных сборок а проблема одна

Добавлено: 24 Май 2011, 22:18
Дед Пахом
Может кто-нибудь, кто столкнулся с этой проблемой, будет столь любезен и опишет ситуацию, при которой она возникает?????

Re: Clarion 7 - 8 разных сборок а проблема одна

Добавлено: 25 Май 2011, 0:20
beholder
Дед Пахом писал(а):Может кто-нибудь, кто столкнулся с этой проблемой, будет столь любезен и опишет ситуацию, при которой она возникает?????

Код: Выделить всё

в моем случае если в ROUTINE встречается следующий код 
IF ErrorCode() THEN
                Message('Невозможно выполнить запорос|' &|
                'Причина (клиент): '&Error()&'|' &|
                'Причина (сервер):'&FileError(), 'Ошибка', Icon:Exclamation)
                SetCursor()
                Return меняем на Exit  тогда собирается
            END

Re: Clarion 7 - 8 разных сборок а проблема одна

Добавлено: 27 Май 2011, 15:45
ORS
Дед Пахом писал(а):Может кто-нибудь, кто столкнулся с этой проблемой, будет столь любезен и опишет ситуацию, при которой она возникает?????
Когда-то давным давно Алексей Соловьев написал вот это в ньюсах, надеюсь поможет:

The CLW compiler in C7 is fixing very dangerous issues with using of RETURN
statements in ROUTINEs which have been introduced by oversights in designing
following enhancements to the Clarion language: local classes and routines
local variables. Both them can allocate data objects which require accurate
destroying, for example instances of classes with destructors. Old
implementation of RETURN from ROUTINE just passed execution control to
RETURN statement of procedure owning a ROUTINE. So, all data objects
allocated in all routines and methods of local classes in the call chain
are remaining not destroyed and this could cause unpredictable results.
In new implementation of ROUTINEs, every ROUTINE returns an implicit result
to its caller which tells how it has been finished: by RETURN or by EXIT
(or by "normal" exit because of reaching a point after last routine
statement). According this value the caller either executing the statement
after DO or distributing RETURN further. This works ok if only ROUTINEs are
in the call chain between routine with RETURN and its owner procedure. But
all is bad if there are methods of local classes in the call chain. The
correct destroying of methods' local data in case of RETURN from ROUTINE
is just impossible because of lack in design of local classes. Look the
following scenario:

Код: Выделить всё

IFace       INTERFACE
SomeMethod    PROCEDURE()
            END

            MAP
              ExtProc (*IFace)
            END

P  PROCEDURE()

LocalClass  CLASS,IMPLEMENTS(IFace)
.....
            END
.....

  CODE
  ...
  ExtProc (LocalClass.IFace)
  ...
  RETURN

SomeRoutine  ROUTINE
  RETURN

LocalClass.IFace.SomeMethod PROCEDURE()
  CODE
  DO SomeRoutine
  RETURN

ExtProc  PROCEDURE (*IFace I)
......
  CODE
  ...
  I.SomeMethod()
  ...
  RETURN
In this example the RETURN statement in SomeRoutine must terminate the
ExtProc too but this is impossible. There are other bad scenarios involving
methods of local classes, e.g. if they are used as callback functions set
by CALLBACK or REGISTEREVENT. Thereby the compiler in C7 is not allowing
RETURN statements in ROUTINEs if they can be called from PROCEDUREs/ROUTINEs
with higher scope level directly or indirectly
. Methods of local classes
have higher scope level than routines of the procedure they (classes) are
declared in.

Re: Clarion 7 - 8 разных сборок а проблема одна

Добавлено: 03 Июнь 2011, 9:48
beholder
:x Уважаемые почему при изменении размера окна элементы на форме меняют свое местоположение? :D

Re: Clarion 7 - 8 разных сборок а проблема одна

Добавлено: 03 Июнь 2011, 10:02
Игорь Столяров
Потому, что нужно добавить в описание окна Extensions шаблон "Allows Control to be resized with Window" и указать в нем поведение control'ов окна при изменении его размеров. Здесь возможны варианты ... ;)