Validity check before downcasting / exception handling?

Markus Gerwinski markus at gerwinski.de
Sun Mar 18 12:49:11 CET 2001


Hello folks!

When downcasting object pointers, I often wish there was a way to check the
cast before.

Peter has already told, in one of the next alpha releases of GPC there will
be a new downcast-operator named 'as' firing a runtime error in case of an
invalid downcast; like this:

  ...
  tBar = object ( tFoo ) ...;
  ...
  foo: pFoo;
  ...
  with foo^ as tBar do   (* if "foo^" isn't a tBar actually, the 'as'    *)
    ...                  (* interrupts the program with a runtime error. *)

Nevertheless I'd like to have a way to check the validity
_before_ casting, thus preventing the runtime error in cases where I don't
want the program to be interrupted.

Currently, I'd suggest the following additional functions in GPC itself:

  Function getObjectType ( obj: object ): "type";
  Function isOfObjectType ( obj: object; runtimeType: "type" ): boolean;

Example:

  ...
  p: pObject;
  ...
  p:= new ( pBar, init );
  ... getObjectType ( p^ ) ...          (* returns "tBar" *)
  ...
  ... isOfObjectType ( p^, pFoo ) ...   (* returns "true", since tBar *)
                                        (* is derived from tFoo.      *)

For downcasting, I'd only need the latter one, but the first function seems
useful to me, too.

Alternatively, I could need a mechanism to absorb the runtime error fired by
"as" before it interrupts the program. Something like this:

  foo: pFoo;
  ...
  with foo^ as tBar do
    ...;
  catchRuntimeError ( @procedureToHandleRuntimeError, parameters );

Anyway, when implementing a catchRuntimeError mechanism in GPC, it would not
seem reasonable to me to just do it for this special kind of runtime error;
thus, here we'd need a general exception handling mechanism to catch and
handle _any_ runtime error without interrupting the program.

Hope this description of my ideas wasn't too confuse...

Yours

  Markus

-- 
http://www.gerwinski.de/~markus/




More information about the Gpc mailing list