|
@@ -174,6 +174,7 @@ let check_overriding ctx c f =
|
|
|
let check_field f get_super_field is_overload = try
|
|
|
(if is_overload && not (has_class_field_flag f CfOverload) then
|
|
|
display_error ctx ("Missing overload declaration for field " ^ i) p);
|
|
|
+ let f_has_override = has_class_field_flag f CfOverride in
|
|
|
let t, f2 = get_super_field csup i in
|
|
|
check_native_name_override ctx f f2;
|
|
|
(* allow to define fields that are not defined for this platform version in superclass *)
|
|
@@ -181,14 +182,14 @@ let check_overriding ctx c f =
|
|
|
| Var { v_read = AccRequire _ } -> raise Not_found;
|
|
|
| _ -> ());
|
|
|
if has_class_field_flag f2 CfAbstract then begin
|
|
|
- if has_class_field_flag f CfOverride
|
|
|
- then display_error ctx ("Field " ^ i ^ " is declared 'override' but parent field " ^ i ^ " is 'abstract' and does not provide any implementation to override") p
|
|
|
+ if f_has_override then
|
|
|
+ display_error ctx ("Field " ^ i ^ " is declared 'override' but parent field " ^ i ^ " is 'abstract' and does not provide any implementation to override") p
|
|
|
else
|
|
|
add_class_field_flag f CfOverride (* our spec requires users to not "override" abstract functions, but our implementation depends on implementations to be declared with "override" ¯\_(ツ)_/¯ *)
|
|
|
end;
|
|
|
if (has_class_field_flag f2 CfOverload && not (has_class_field_flag f CfOverload)) then
|
|
|
display_error ctx ("Field " ^ i ^ " should be declared with overload since it was already declared as overload in superclass") p
|
|
|
- else if not (has_class_field_flag f CfOverride) then begin
|
|
|
+ else if not f_has_override && not (has_class_field_flag f2 CfAbstract) then begin
|
|
|
if has_class_flag c CExtern then add_class_field_flag f CfOverride
|
|
|
else display_error ctx ("Field " ^ i ^ " should be declared with 'override' since it is inherited from superclass " ^ s_type_path csup.cl_path) p
|
|
|
end else if not (has_class_field_flag f CfPublic) && (has_class_field_flag f2 CfPublic) then
|