bug fix #698
This commit is contained in:
parent
df01aaaaa8
commit
1749364db4
22
TestSuite/events3.pas
Normal file
22
TestSuite/events3.pas
Normal file
|
|
@ -0,0 +1,22 @@
|
||||||
|
type
|
||||||
|
T1<T> = class
|
||||||
|
event E1: procedure;
|
||||||
|
|
||||||
|
procedure TryE1();
|
||||||
|
begin
|
||||||
|
if E1 <> nil then E1();
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
var i: integer;
|
||||||
|
procedure p;
|
||||||
|
begin
|
||||||
|
i := 1;
|
||||||
|
end;
|
||||||
|
|
||||||
|
begin
|
||||||
|
var Obj := new T1<integer>();
|
||||||
|
Obj.E1 += p;
|
||||||
|
Obj.TryE1();
|
||||||
|
assert(i = 1);
|
||||||
|
end.
|
||||||
|
|
@ -1554,6 +1554,28 @@ namespace PascalABCCompiler.TreeRealization
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected common_event make_event(event_node orig_event, location loc)
|
||||||
|
{
|
||||||
|
common_event cme = orig_event as common_event;
|
||||||
|
compiled_event ce = orig_event as compiled_event;
|
||||||
|
if (_members[orig_event.add_method] == null)
|
||||||
|
ConvertMember(orig_event.add_method);
|
||||||
|
if (_members[orig_event.remove_method] == null)
|
||||||
|
ConvertMember(orig_event.remove_method);
|
||||||
|
if (orig_event.raise_method != null && _members[orig_event.raise_method] == null)
|
||||||
|
ConvertMember(orig_event.raise_method);
|
||||||
|
common_event evnt = new common_event(orig_event.name, generic_convertions.determine_type(
|
||||||
|
orig_event.delegate_type, _instance_params, false), this,
|
||||||
|
_members[orig_event.add_method] as common_method_node,
|
||||||
|
_members[orig_event.remove_method] as common_method_node,
|
||||||
|
orig_event.raise_method != null ? _members[orig_event.raise_method] as common_method_node : null,
|
||||||
|
cme != null ? cme.field_access_level : SemanticTree.field_access_level.fal_public,
|
||||||
|
orig_event.is_static ? SemanticTree.polymorphic_state.ps_static : SemanticTree.polymorphic_state.ps_common,
|
||||||
|
loc
|
||||||
|
);
|
||||||
|
return evnt;
|
||||||
|
}
|
||||||
|
|
||||||
protected common_property_node make_property(property_node orig_pn, location loc)
|
protected common_property_node make_property(property_node orig_pn, location loc)
|
||||||
{
|
{
|
||||||
AddPropertyAccessors(orig_pn);
|
AddPropertyAccessors(orig_pn);
|
||||||
|
|
@ -1718,7 +1740,8 @@ namespace PascalABCCompiler.TreeRealization
|
||||||
break;
|
break;
|
||||||
case general_node_type.event_node:
|
case general_node_type.event_node:
|
||||||
//(ssyy) Не знаю, что тут делать
|
//(ssyy) Не знаю, что тут делать
|
||||||
rez_node = orig_node;
|
event_node orig_event = (event_node)orig_node;
|
||||||
|
rez_node = make_event(orig_event, loc);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
throw new CompilerInternalError("Unexpected definition_node.");
|
throw new CompilerInternalError("Unexpected definition_node.");
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue