|
@@ -168,29 +168,39 @@ implementation
|
|
|
case left.resultdef.typ of
|
|
|
classrefdef :
|
|
|
resultdef:=left.resultdef;
|
|
|
+ recorddef,
|
|
|
objectdef:
|
|
|
- { access to the classtype while specializing? }
|
|
|
- if (df_generic in left.resultdef.defoptions) then
|
|
|
- begin
|
|
|
- defaultresultdef:=true;
|
|
|
- if assigned(current_structdef) then
|
|
|
- begin
|
|
|
- if assigned(current_structdef.genericdef) then
|
|
|
- if current_structdef.genericdef=left.resultdef then
|
|
|
+ begin
|
|
|
+ if (left.resultdef.typ=objectdef) or
|
|
|
+ ((target_info.system in systems_jvm) and
|
|
|
+ (left.resultdef.typ=recorddef)) then
|
|
|
+ begin
|
|
|
+ { access to the classtype while specializing? }
|
|
|
+ if (df_generic in left.resultdef.defoptions) then
|
|
|
+ begin
|
|
|
+ defaultresultdef:=true;
|
|
|
+ if assigned(current_structdef) then
|
|
|
begin
|
|
|
- resultdef:=tclassrefdef.create(current_structdef);
|
|
|
- defaultresultdef:=false;
|
|
|
+ if assigned(current_structdef.genericdef) then
|
|
|
+ if current_structdef.genericdef=left.resultdef then
|
|
|
+ begin
|
|
|
+ resultdef:=tclassrefdef.create(current_structdef);
|
|
|
+ defaultresultdef:=false;
|
|
|
+ end
|
|
|
+ else
|
|
|
+ CGMessage(parser_e_cant_create_generics_of_this_type);
|
|
|
end
|
|
|
else
|
|
|
- CGMessage(parser_e_cant_create_generics_of_this_type);
|
|
|
- end
|
|
|
- else
|
|
|
- message(parser_e_cant_create_generics_of_this_type);
|
|
|
- if defaultresultdef then
|
|
|
- resultdef:=tclassrefdef.create(left.resultdef);
|
|
|
- end
|
|
|
- else
|
|
|
- resultdef:=tclassrefdef.create(left.resultdef);
|
|
|
+ message(parser_e_cant_create_generics_of_this_type);
|
|
|
+ if defaultresultdef then
|
|
|
+ resultdef:=tclassrefdef.create(left.resultdef);
|
|
|
+ end
|
|
|
+ else
|
|
|
+ resultdef:=tclassrefdef.create(left.resultdef);
|
|
|
+ end
|
|
|
+ else
|
|
|
+ CGMessage(parser_e_pointer_to_class_expected);
|
|
|
+ end
|
|
|
else
|
|
|
CGMessage(parser_e_pointer_to_class_expected);
|
|
|
end;
|