From 9e985376924144f825d1197551c7d8d885ccaa41 Mon Sep 17 00:00:00 2001 From: Walter Bright Date: Tue, 16 May 2023 18:17:33 -0700 Subject: [PATCH] add ref-return-scope table --- spec/function.dd | 33 ++++++++++++++++++++++++++++++--- 1 file changed, 30 insertions(+), 3 deletions(-) diff --git a/spec/function.dd b/spec/function.dd index 4722baff52..e643530758 100644 --- a/spec/function.dd +++ b/spec/function.dd @@ -1905,9 +1905,32 @@ $(H3 $(LNAME2 ref-return-scope-parameters, Ref Return Scope Parameters)) When a parameter is passed by `ref` and has both the `return` and `scope` storage classes, it gets $(LINK2 #return-scope-parameters, `return scope`) semantics if and only if the `return` and `scope` keywords appear adjacent to each other, in that order. - Specifying a `return ref` and `scope` parameter enables returning a reference to a scope pointer. - In all other cases, the parameter has $(LINK2 #return-ref-parameters, `return ref`) semantics - and regular $(LINK2 #scope-parameters, `scope`) semantics.) + This behavior is summarized as follows:) + + $(TABLE2 Combinations of `ref` $(COMMA) `return` and `scope`, + $(THEAD Order, Interpretation) + $(TROW `ref`, $(REF)) + $(TROW `return`, `return`) + $(TROW `scope`, $(SCOPE)) + $(TROW `return ref`, $(RETURN_REF)) + $(TROW `ref return`, $(RETURN_REF)) + $(TROW `return scope`, $(RETURN_SCOPE)) + $(TROW `scope return`, $(RETURN_SCOPE)) + $(TROW `ref scope`, $(REF) and $(SCOPE)) + $(TROW `scope ref`, $(REF) and $(SCOPE)) + $(TROW `ref return scope`, $(REF) and $(RETURN_SCOPE)) + $(TROW `return scope ref`, $(REF) and $(RETURN_SCOPE)) + $(TROW `ref scope return`, $(RETURN_REF) and $(SCOPE)) + $(TROW `return ref scope`, $(RETURN_REF) and $(SCOPE)) + $(TROW `scope return ref`, $(RETURN_REF) and $(SCOPE)) + $(TROW `scope ref return`, $(RETURN_REF) and $(SCOPE)) + ) + + $(BEST_PRACTICE do not use `ref return` and `scope return`.) + + $(P Specifying a `return ref` and `scope` parameter enables returning a reference to a scope pointer. + In all other cases, the parameter has $(RETURN_REF) semantics + and regular $(SCOPE) semantics.) --- U xerxes( ref return scope V v) // (1) ref and return scope @@ -4230,3 +4253,7 @@ Macros: TITLE=Functions ASSIGNEXPRESSION=$(GLINK2 expression, AssignExpression) CHECK=✔ + REF=$(LINK2 #ref-params, `ref`) + RETURN_REF=$(LINK2 #return-ref-parameters, `return ref`) + SCOPE=$(LINK2 #scope-parameters, `scope`) + RETURN_SCOPE=$(LINK2 #return-scope-parameters, `return scope`)