mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-24 15:29:18 +02:00
* give an error when trying to let an objcclass conform to a
forward-declared objcprotocol (mantis #17341) git-svn-id: trunk@16523 -
This commit is contained in:
parent
a880603816
commit
3a089cea10
1
.gitattributes
vendored
1
.gitattributes
vendored
@ -10073,6 +10073,7 @@ tests/webtbf/tw1633.pp svneol=native#text/plain
|
|||||||
tests/webtbf/tw1642.pp svneol=native#text/plain
|
tests/webtbf/tw1642.pp svneol=native#text/plain
|
||||||
tests/webtbf/tw1655.pp svneol=native#text/plain
|
tests/webtbf/tw1655.pp svneol=native#text/plain
|
||||||
tests/webtbf/tw1681.pp svneol=native#text/plain
|
tests/webtbf/tw1681.pp svneol=native#text/plain
|
||||||
|
tests/webtbf/tw17341.pp svneol=native#text/plain
|
||||||
tests/webtbf/tw17455.pp svneol=native#text/plain
|
tests/webtbf/tw17455.pp svneol=native#text/plain
|
||||||
tests/webtbf/tw1754.pp svneol=native#text/plain
|
tests/webtbf/tw1754.pp svneol=native#text/plain
|
||||||
tests/webtbf/tw1754b.pp svneol=native#text/plain
|
tests/webtbf/tw1754b.pp svneol=native#text/plain
|
||||||
|
@ -368,7 +368,7 @@ scanner_w_illegal_warn_identifier=02087_W_Illegal identifier "$1" for $WARN dire
|
|||||||
#
|
#
|
||||||
# Parser
|
# Parser
|
||||||
#
|
#
|
||||||
# 03296 is the last used one
|
# 03298 is the last used one
|
||||||
#
|
#
|
||||||
% \section{Parser messages}
|
% \section{Parser messages}
|
||||||
% This section lists all parser messages. The parser takes care of the
|
% This section lists all parser messages. The parser takes care of the
|
||||||
@ -1341,6 +1341,16 @@ parser_f_no_generic_inside_generic=03297_F_Declaration of generic class inside a
|
|||||||
% (guarded by internal error 200511173 in tscannerfile.startrecordtokens).
|
% (guarded by internal error 200511173 in tscannerfile.startrecordtokens).
|
||||||
% Since generics are implemented by recording tokens, it is not possible to
|
% Since generics are implemented by recording tokens, it is not possible to
|
||||||
% have declaration of generic class inside another generic class.
|
% have declaration of generic class inside another generic class.
|
||||||
|
parser_e_forward_protocol_declaration_must_be_resolved=03298_E_Forward declaration of objcprotocol "$1" must be resolved before an objcclass can conform to it
|
||||||
|
% An objcprotocol must be fully defined before classes can conform to it.
|
||||||
|
% This error occurs in the following situation:
|
||||||
|
% \begin{verbatim}
|
||||||
|
% Type MyProtocol = objcprotoocl;
|
||||||
|
% ChildClass = Class(NSObject,MyProtocol)
|
||||||
|
% ...
|
||||||
|
% end;
|
||||||
|
% \end{verbatim}
|
||||||
|
% where \var{MyProtocol} is declared but not defined.
|
||||||
% \end{description}
|
% \end{description}
|
||||||
#
|
#
|
||||||
# Type Checking
|
# Type Checking
|
||||||
|
@ -386,6 +386,7 @@ const
|
|||||||
parser_e_objc_missing_enumeration_defs=03295;
|
parser_e_objc_missing_enumeration_defs=03295;
|
||||||
parser_e_no_procvarnested_const=03296;
|
parser_e_no_procvarnested_const=03296;
|
||||||
parser_f_no_generic_inside_generic=03297;
|
parser_f_no_generic_inside_generic=03297;
|
||||||
|
parser_e_forward_protocol_declaration_must_be_resolved=03298;
|
||||||
type_e_mismatch=04000;
|
type_e_mismatch=04000;
|
||||||
type_e_incompatible_types=04001;
|
type_e_incompatible_types=04001;
|
||||||
type_e_not_equal_types=04002;
|
type_e_not_equal_types=04002;
|
||||||
@ -871,9 +872,9 @@ const
|
|||||||
option_info=11024;
|
option_info=11024;
|
||||||
option_help_pages=11025;
|
option_help_pages=11025;
|
||||||
|
|
||||||
MsgTxtSize = 57905;
|
MsgTxtSize = 58009;
|
||||||
|
|
||||||
MsgIdxMax : array[1..20] of longint=(
|
MsgIdxMax : array[1..20] of longint=(
|
||||||
24,88,298,97,82,54,111,22,202,63,
|
24,88,299,97,82,54,111,22,202,63,
|
||||||
49,20,1,1,1,1,1,1,1,1
|
49,20,1,1,1,1,1,1,1,1
|
||||||
);
|
);
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -277,6 +277,11 @@ implementation
|
|||||||
Message1(type_e_protocol_type_expected,intfdef.typename);
|
Message1(type_e_protocol_type_expected,intfdef.typename);
|
||||||
exit;
|
exit;
|
||||||
end;
|
end;
|
||||||
|
if (oo_is_forward in intfdef.objectoptions) then
|
||||||
|
begin
|
||||||
|
Message1(parser_e_forward_protocol_declaration_must_be_resolved,intfdef.objrealname^);
|
||||||
|
exit;
|
||||||
|
end;
|
||||||
if current_objectdef.find_implemented_interface(intfdef)<>nil then
|
if current_objectdef.find_implemented_interface(intfdef)<>nil then
|
||||||
Message1(sym_e_duplicate_id,intfdef.objname^)
|
Message1(sym_e_duplicate_id,intfdef.objname^)
|
||||||
else
|
else
|
||||||
|
17
tests/webtbf/tw17341.pp
Normal file
17
tests/webtbf/tw17341.pp
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
{ %fail }
|
||||||
|
{ %target=darwin }
|
||||||
|
{ %cpu=powerpc,powerpc64,i386,x86_64,arm }
|
||||||
|
|
||||||
|
{$mode objfpc}
|
||||||
|
{$modeswitch objectivec1}
|
||||||
|
|
||||||
|
type
|
||||||
|
tmyprotocol = objcprotocol;
|
||||||
|
tmyclass = objcclass(NSObject,tmyprotocol)
|
||||||
|
end;
|
||||||
|
|
||||||
|
tmyprotocol = objcprotocol
|
||||||
|
end;
|
||||||
|
|
||||||
|
begin
|
||||||
|
end.
|
Loading…
Reference in New Issue
Block a user