This commit is contained in:
Бондарев Иван 2018-03-11 19:01:24 +01:00
parent df01aaaaa8
commit 1749364db4
2 changed files with 46 additions and 1 deletions

22
TestSuite/events3.pas Normal file
View 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.

View file

@ -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)
{
AddPropertyAccessors(orig_pn);
@ -1718,7 +1740,8 @@ namespace PascalABCCompiler.TreeRealization
break;
case general_node_type.event_node:
//(ssyy) Не знаю, что тут делать
rez_node = orig_node;
event_node orig_event = (event_node)orig_node;
rez_node = make_event(orig_event, loc);
break;
default:
throw new CompilerInternalError("Unexpected definition_node.");