com php-langspec: Fix clone precedence: spec/00-specification-for-php.md spec/10-expressions.md spec/19-grammar.md

[email protected] (Nikita Popov) Tue, 19 Sep 2017 07:56:14 +0000
Newsgroups php.standards.cvs
Message-ID <[email protected]>
Commit:    4581ccd4a9d4909b9983675a41613dd388a01733=0AAuthor:    Nikita Pop=
ov <[email protected]>         Tue, 19 Sep 2017 09:56:14 +0200=0AParents:   733=
810097e09bc718c8ad7a8dcd6de3a47659f72=0ABranches:  master=0A=0ALink:       =
http://git.php.net/?p=3Dphp-langspec.git;a=3Dcommitdiff;h=3D4581ccd4a9d4909=
b9983675a41613dd388a01733=0A=0ALog:=0AFix clone precedence=0A=0AChanged pat=
hs:=0A  M  spec/00-specification-for-php.md=0A  M  spec/10-expressions.md=
=0A  M  spec/19-grammar.md=0A=0A=0ADiff:=0Adiff --git a/spec/00-specificati=
on-for-php.md b/spec/00-specification-for-php.md=0Aindex cccc3b8..64df695 1=
00644=0A--- a/spec/00-specification-for-php.md=0A+++ b/spec/00-specificatio=
n-for-php.md=0A@@ -116,7 +116,6 @@ is distributed without any warranty.=0A =
    - [Anonymous Function Creation](10-expressions.md#anonymous-function-cr=
eation)=0A   - [Postfix Operators](10-expressions.md#postfix-operators)=0A =
    - [General](10-expressions.md#general-3)=0A-    - [The `clone` Operator=
](10-expressions.md#the-clone-operator)=0A     - [The `new` Operator](10-ex=
pressions.md#the-new-operator)=0A     - [Array Creation Operator](10-expres=
sions.md#array-creation-operator)=0A     - [Subscript Operator](10-expressi=
ons.md#subscript-operator)=0A@@ -125,6 +124,7 @@ is distributed without any=
 warranty.=0A     - [Member Call Operator](10-expressions.md#member-call-op=
erator)=0A     - [Postfix Increment and Decrement Operators](10-expressions=
.md#postfix-increment-and-decrement-operators)=0A     - [Scope-Resolution O=
perator](10-expressions.md#scope-resolution-operator)=0A+  - [The `clone` O=
perator](10-expressions.md#the-clone-operator)=0A   - [Exponentiation Opera=
tor](10-expressions.md#exponentiation-operator)=0A   - [Unary Operators](10=
-expressions.md#unary-operators)=0A     - [General](10-expressions.md#gener=
al-4)=0Adiff --git a/spec/10-expressions.md b/spec/10-expressions.md=0Ainde=
x c1a1445..7431eaf 100644=0A--- a/spec/10-expressions.md=0A+++ b/spec/10-ex=
pressions.md=0A@@ -902,82 +902,23 @@ class C=0A <!-- GRAMMAR=0A postfix-exp=
ression:=0A   primary-expression=0A-  clone-expression=0A   object-creation=
-expression=0A   postfix-increment-expression=0A   postfix-decrement-expres=
sion=0A-  exponentiation-expression=0A -->=0A =0A <pre>=0A <i id=3D"grammar=
-postfix-expression">postfix-expression:</i>=0A    <i><a href=3D"#grammar-p=
rimary-expression">primary-expression</a></i>=0A-   <i><a href=3D"#grammar-=
clone-expression">clone-expression</a></i>=0A    <i><a href=3D"#grammar-obj=
ect-creation-expression">object-creation-expression</a></i>=0A    <i><a hre=
f=3D"#grammar-postfix-increment-expression">postfix-increment-expression</a=
></i>=0A    <i><a href=3D"#grammar-postfix-decrement-expression">postfix-de=
crement-expression</a></i>=0A-   <i><a href=3D"#grammar-exponentiation-expr=
ession">exponentiation-expression</a></i>=0A </pre>=0A =0A **Semantics**=0A=
 =0A These operators associate left-to-right.=0A =0A-### The `clone` Operat=
or=0A-=0A-**Syntax**=0A-=0A-<!-- GRAMMAR=0A-clone-expression:=0A-  'clone' =
expression=0A--->=0A-=0A-<pre>=0A-<i id=3D"grammar-clone-expression">clone-=
expression:</i>=0A-   clone   <i><a href=3D"#grammar-expression">expression=
</a></i>=0A-</pre>=0A-=0A-**Constraints**=0A-=0A-*expression* must designat=
e an object.=0A-=0A-**Semantics**=0A-=0A-The `clone` operator creates a new=
 object that is a shallow copy of the object designated by *expression*.=0A=
-Then, if the class type of *expression* has a method called [`__clone`](14=
-classes.md#method-__clone), it is called to perform a deep copy.=0A-The re=
sult is the new object.=0A-=0A-**Examples**=0A-=0A-Consider a class `Employ=
ee`, from which is derived a class `Manager`. Let us=0A-assume that both cl=
asses contain properties that are objects. `clone` is=0A-used to make a cop=
y of a `Manager` object, and behind the scenes, the=0A-`Manager` object use=
s clone to copy the properties for the base class,=0A-`Employee`.=0A-=0A-``=
`PHP=0A-class Employee=0A-{=0A-  //...=0A-  public function __clone()=0A-  =
{=0A-    // make a deep copy of Employee object=0A-  }=0A-}=0A-class Manage=
r extends Employee=0A-{=0A-  //...=0A-  public function __clone()=0A-  {=0A=
-    $v =3D parent::__clone();=0A-    // make a deep copy of Manager object=
=0A-=0A-  }=0A-}=0A-$obj1 =3D new Manager("Smith", 23);=0A-$obj2 =3D clone =
$obj1;  // creates a new Manager that is a deep copy=0A-```=0A-=0A ### The =
`new` Operator=0A =0A **Syntax**=0A@@ -1803,18 +1744,80 @@ class Point=0A }=
=0A ```=0A =0A+## The `clone` Operator=0A+=0A+**Syntax**=0A+=0A+<!-- GRAMMA=
R=0A+clone-expression:=0A+  postfix-expression=0A+  'clone' postfix-express=
ion=0A+-->=0A+=0A+<pre>=0A+<i id=3D"grammar-clone-expression">clone-express=
ion:</i>=0A+   <i><a href=3D"#grammar-postfix-expression">postfix-expressio=
n</a></i>=0A+   clone   <i><a href=3D"#grammar-postfix-expression">postfix-=
expression</a></i>=0A+</pre>=0A+=0A+**Constraints**=0A+=0A+*postfix-express=
ion* must designate an object.=0A+=0A+**Semantics**=0A+=0A+The `clone` oper=
ator creates a new object that is a shallow copy of the object designated=
=0A+by *postfix-expression*.=0A+Then, if the class type of *postfix-express=
ion* has a method called=0A+[`__clone`](14-classes.md#method-__clone), it i=
s called to perform a deep copy.=0A+The result is the new object.=0A+=0A+**=
Examples**=0A+=0A+Consider a class `Employee`, from which is derived a clas=
s `Manager`. Let us=0A+assume that both classes contain properties that are=
 objects. `clone` is=0A+used to make a copy of a `Manager` object, and behi=
nd the scenes, the=0A+`Manager` object uses clone to copy the properties fo=
r the base class,=0A+`Employee`.=0A+=0A+```PHP=0A+class Employee=0A+{=0A+  =
//...=0A+  public function __clone()=0A+  {=0A+    // make a deep copy of E=
mployee object=0A+  }=0A+}=0A+class Manager extends Employee=0A+{=0A+  //..=
.=0A+  public function __clone()=0A+  {=0A+    $v =3D parent::__clone();=0A=
+    // make a deep copy of Manager object=0A+=0A+  }=0A+}=0A+$obj1 =3D new=
 Manager("Smith", 23);=0A+$obj2 =3D clone $obj1;  // creates a new Manager =
that is a deep copy=0A+```=0A+=0A+=0A ## Exponentiation Operator=0A =0A **S=
yntax**=0A =0A <!-- GRAMMAR=0A exponentiation-expression:=0A-  postfix-expr=
ession '**' exponentiation-expression=0A+  clone-expression=0A+  clone-expr=
ession '**' exponentiation-expression=0A -->=0A =0A <pre>=0A <i id=3D"gramm=
ar-exponentiation-expression">exponentiation-expression:</i>=0A-   <i><a hr=
ef=3D"#grammar-postfix-expression">postfix-expression</a></i>   **   <i><a =
href=3D"#grammar-exponentiation-expression">exponentiation-expression</a></=
i>=0A+   <i><a href=3D"#grammar-clone-expression">clone-expression</a></i>=
=0A+   <i><a href=3D"#grammar-clone-expression">clone-expression</a></i>   =
**   <i><a href=3D"#grammar-exponentiation-expression">exponentiation-expre=
ssion</a></i>=0A </pre>=0A =0A **Semantics**=0Adiff --git a/spec/19-grammar=
.md b/spec/19-grammar.md=0Aindex 4fcba00..584e39e 100644=0A--- a/spec/19-gr=
ammar.md=0A+++ b/spec/19-grammar.md=0A@@ -457,14 +457,9 @@ The grammar nota=
tion is described in [Grammars section](09-lexical-structure.md#=0A =0A <i =
id=3D"grammar-postfix-expression">postfix-expression:</i>=0A    <i><a href=
=3D"#grammar-primary-expression">primary-expression</a></i>=0A-   <i><a hre=
f=3D"#grammar-clone-expression">clone-expression</a></i>=0A    <i><a href=
=3D"#grammar-object-creation-expression">object-creation-expression</a></i>=
=0A    <i><a href=3D"#grammar-postfix-increment-expression">postfix-increme=
nt-expression</a></i>=0A    <i><a href=3D"#grammar-postfix-decrement-expres=
sion">postfix-decrement-expression</a></i>=0A-   <i><a href=3D"#grammar-exp=
onentiation-expression">exponentiation-expression</a></i>=0A-=0A-<i id=3D"g=
rammar-clone-expression">clone-expression:</i>=0A-   clone   <i><a href=3D"=
#grammar-expression">expression</a></i>=0A =0A <i id=3D"grammar-object-crea=
tion-expression">object-creation-expression:</i>=0A    new   <i><a href=3D"=
#grammar-class-type-designator">class-type-designator</a></i>   (   <i><a h=
ref=3D"#grammar-argument-expression-list">argument-expression-list</a></i><=
sub>opt</sub>   )=0A@@ -561,8 +556,13 @@ The grammar notation is described =
in [Grammars section](09-lexical-structure.md#=0A    parent=0A    static=0A=
 =0A+<i id=3D"grammar-clone-expression">clone-expression:</i>=0A+   <i><a h=
ref=3D"#grammar-postfix-expression">postfix-expression</a></i>=0A+   clone =
  <i><a href=3D"#grammar-postfix-expression">postfix-expression</a></i>=0A+=
=0A <i id=3D"grammar-exponentiation-expression">exponentiation-expression:<=
/i>=0A-   <i><a href=3D"#grammar-postfix-expression">postfix-expression</a>=
</i>   **   <i><a href=3D"#grammar-exponentiation-expression">exponentiatio=
n-expression</a></i>=0A+   <i><a href=3D"#grammar-clone-expression">clone-e=
xpression</a></i>=0A+   <i><a href=3D"#grammar-clone-expression">clone-expr=
ession</a></i>   **   <i><a href=3D"#grammar-exponentiation-expression">exp=
onentiation-expression</a></i>=0A =0A <i id=3D"grammar-unary-expression">un=
ary-expression:</i>=0A    <i><a href=3D"#grammar-exponentiation-expression"=
>exponentiation-expression</a></i>=0A