Skip to content

Commit 74722cb

Browse files
committed
Add [@ocaml.principal] and [@ocaml.noprincipal] attributes, and use in oo.mli
1 parent 6d7d3b8 commit 74722cb

File tree

2 files changed

+15
-0
lines changed

2 files changed

+15
-0
lines changed

parsing/builtin_attributes.ml

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -338,6 +338,15 @@ let clflags_attribute_with_int_payload attr ~name clflags_ref =
338338
| None -> ()
339339
end
340340

341+
let principal_attribute attr =
342+
clflags_attribute_without_payload attr
343+
~name:"principal" Clflags.principal
344+
345+
let noprincipal_attribute attr =
346+
clflags_attribute_without_payload' attr
347+
~name:"noprincipal"
348+
~f:(fun () -> Clflags.principal := false)
349+
341350
let nolabels_attribute attr =
342351
clflags_attribute_without_payload attr
343352
~name:"nolabels" Clflags.classic
@@ -377,10 +386,14 @@ let afl_inst_ratio_attribute attr =
377386

378387
let parse_standard_interface_attributes attr =
379388
warning_attribute attr;
389+
principal_attribute attr;
390+
noprincipal_attribute attr;
380391
nolabels_attribute attr
381392

382393
let parse_standard_implementation_attributes attr =
383394
warning_attribute attr;
395+
principal_attribute attr;
396+
noprincipal_attribute attr;
384397
nolabels_attribute attr;
385398
inline_attribute attr;
386399
afl_inst_ratio_attribute attr;

stdlib/oo.mli

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ open! Stdlib
1818

1919
(** Operations on objects *)
2020

21+
[@@@ocaml.noprincipal] (* preserve structure sharing in copy (PR#9767) *)
22+
2123
val copy : (< .. > as 'a) -> 'a
2224
(** [Oo.copy o] returns a copy of object [o], that is a fresh
2325
object with the same methods and instance variables as [o]. *)

0 commit comments

Comments
 (0)