Changeset 4550 for trunk/compiler

Show
Ignore:
Timestamp:
10/31/08 09:44:36 (2 months ago)
Author:
pmoura
Message:

Modified the implementation of the built-in method define_events/5 to throw an exception when the monitor object doesn't define the required event handler methods (previously the define_events/5 call would simply fail).

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • trunk/compiler/logtalk.pl

    r4548 r4550  
    11611161    var(Event), 
    11621162    !, 
    1163     '$lgt_current_object_'(Monitor, _, _, Def, _, _, _, _, _, _, _), 
     1163    '$lgt_current_object_'(Monitor, _, _, Def, _, _, _, _, _, _, _) -> 
    11641164    (   call_with_args(Def, before(Obj, Msg, Sender), Monitor, Monitor, Monitor, BCall, _) -> 
    11651165        (   call_with_args(Def, after(Obj, Msg, Sender), Monitor, Monitor, Monitor, ACall, _) -> 
     
    11681168            retractall('$lgt_after_'(Obj, Msg, Sender, Monitor, _)), 
    11691169            assertz('$lgt_after_'(Obj, Msg, Sender, Monitor, ACall)) 
     1170        ;   throw(error(existence_error(procedure, after/3), define_events(Event, Obj, Msg, Sender, Monitor))) 
    11701171        ) 
     1172    ;   throw(error(existence_error(procedure, before/3), define_events(Event, Obj, Msg, Sender, Monitor))) 
    11711173    ). 
    11721174 
    11731175define_events(before, Obj, Msg, Sender, Monitor) :- 
    1174     '$lgt_current_object_'(Monitor, _, _, Def, _, _, _, _, _, _, _), 
    1175     call_with_args(Def, before(Obj, Msg, Sender), Monitor, Monitor, Monitor, Call, _) -> 
    1176     retractall('$lgt_before_'(Obj, Msg, Sender, Monitor, _)), 
    1177     assertz('$lgt_before_'(Obj, Msg, Sender, Monitor, Call)). 
     1176    '$lgt_current_object_'(Monitor, _, _, Def, _, _, _, _, _, _, _) -> 
     1177    (   call_with_args(Def, before(Obj, Msg, Sender), Monitor, Monitor, Monitor, Call, _) -> 
     1178        retractall('$lgt_before_'(Obj, Msg, Sender, Monitor, _)), 
     1179        assertz('$lgt_before_'(Obj, Msg, Sender, Monitor, Call)) 
     1180    ;   throw(error(existence_error(procedure, before/3), define_events(before, Obj, Msg, Sender, Monitor))) 
     1181    ). 
    11781182 
    11791183define_events(after, Obj, Msg, Sender, Monitor) :- 
    1180     '$lgt_current_object_'(Monitor, _, _, Def, _, _, _, _, _, _, _), 
    1181     call_with_args(Def, after(Obj, Msg, Sender), Monitor, Monitor, Monitor, Call, _) -> 
    1182     retractall('$lgt_after_'(Obj, Msg, Sender, Monitor, _)), 
    1183     assertz('$lgt_after_'(Obj, Msg, Sender, Monitor, Call)). 
     1184    '$lgt_current_object_'(Monitor, _, _, Def, _, _, _, _, _, _, _) -> 
     1185    (   call_with_args(Def, after(Obj, Msg, Sender), Monitor, Monitor, Monitor, Call, _) -> 
     1186        retractall('$lgt_after_'(Obj, Msg, Sender, Monitor, _)), 
     1187        assertz('$lgt_after_'(Obj, Msg, Sender, Monitor, Call)) 
     1188    ;   throw(error(existence_error(procedure, after/3), define_events(after, Obj, Msg, Sender, Monitor))) 
     1189    ). 
    11841190 
    11851191