com php-langspec: Fix precedence of instanceof/logical not: spec/00-specification-for-php.md spec/10-expressions.md spec/19-grammar.md
[email protected] (Nikita Popov) Tue, 19 Sep 2017 07:31:35 +0000
| Newsgroups | php.standards.cvs |
|---|---|
| Message-ID | <[email protected]> |
Commit: 714f68927038ece7e8f5f0a2bbce04a8c600eb25=0AAuthor: Nikita Pop= ov <[email protected]> Tue, 19 Sep 2017 09:31:35 +0200=0AParents: 7d6= ae475928a67c706aeaec8c131bed9567aafed=0ABranches: master=0A=0ALink: = http://git.php.net/?p=3Dphp-langspec.git;a=3Dcommitdiff;h=3D714f68927038ece= 7e8f5f0a2bbce04a8c600eb25=0A=0ALog:=0AFix precedence of instanceof/logical = not=0A=0AFixes #189.=0A=0ABugs:=0Ahttps://bugs.php.net/189=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 fb7fe9b..3fb4db0 1= 00644=0A--- a/spec/00-specification-for-php.md=0A+++ b/spec/00-specificatio= n-for-php.md=0A@@ -134,6 +134,7 @@ is distributed without any warranty.=0A = - [Shell Command Operator](10-expressions.md#shell-command-operator)=0A= - [Cast Operator](10-expressions.md#cast-operator)=0A - [`instanceof= ` Operator](10-expressions.md#instanceof-operator)=0A+ - [Logical NOT Oper= ator](10-expressions.md#logical-not-operator)=0A - [Multiplicative Operat= ors](10-expressions.md#multiplicative-operators)=0A - [Additive Operators= ](10-expressions.md#additive-operators)=0A - [Bitwise Shift Operators](10= -expressions.md#bitwise-shift-operators)=0Adiff --git a/spec/10-expressions= .md b/spec/10-expressions.md=0Aindex cfae203..f854436 100644=0A--- a/spec/1= 0-expressions.md=0A+++ b/spec/10-expressions.md=0A@@ -1993,7 +1993,7 @@ una= ry-op-expression:=0A unary-operator unary-expression=0A =0A unary-operato= r: one of=0A- '+' '-' '!' '~'=0A+ '+' '-' '~'=0A -->=0A =0A <pre>=0A@@ -2= 001,7 +2001,7 @@ unary-operator: one of=0A <i><a href=3D"#grammar-unary-= operator">unary-operator</a></i> <i><a href=3D"#grammar-unary-expression"= >unary-expression</a></i>=0A =0A <i id=3D"grammar-unary-operator">unary-ope= rator: one of</i>=0A- + - ! ~=0A+ + - ~=0A </pre>=0A =0A **Co= nstraints**=0A@@ -2013,10 +2013,6 @@ an object supporting `~`.=0A =0A **Sem= antics**=0A =0A-For a unary `!` operator the type of the result is `bool`.= =0A-The value of the operand is [converted to type `bool`](08-conversions.m= d#converting-to-boolean-type)=0A-and if it is `TRUE` then the of the operat= or result is `FALSE`, and the result is `TRUE` otherwise.=0A-=0A *Arithmeti= c Operands*=0A =0A For a unary `+` operator used with an arithmetic operand= , the type and=0A@@ -2073,8 +2069,6 @@ and for `+` and `-` the object is [c= onverted to `int`](08-conversions.md#convert=0A ```PHP=0A $v =3D +10;=0A if= ($v1 > -5) // ...=0A-$t =3D TRUE;=0A-if (!$t) // ...=0A $v =3D ~0b1010101;= =0A $s =3D "\x86\x97"; $s =3D ~$s; // $s is "yh"=0A ```=0A@@ -2300,24 +2294= ,50 @@ $e2 =3D new E1;=0A var_dump($e2 instanceof $e1); // TRUE=0A ```= =0A =0A+## Logical NOT Operator=0A+=0A+<!-- GRAMMAR=0A+logical-NOT-expressi= on:=0A+ instanceof-expression=0A+ '!' instanceof-expression=0A+-->=0A+=0A= +<pre>=0A+<i id=3D"grammar-logical-NOT-expression">logical-NOT-expression:<= /i>=0A+ <i><a href=3D"#grammar-instanceof-expression">instanceof-expressi= on</a></i>=0A+ ! <i><a href=3D"#grammar-instanceof-expression">instance= of-expression</a></i>=0A+</pre>=0A+=0A+**Semantics**=0A+=0A+The value of th= e operand is [converted to type `bool`](08-conversions.md#converting-to-boo= lean-type)=0A+and if it is `TRUE` then the result of the operator is `FALSE= `. The result is `TRUE` otherwise.=0A+=0A+**Examples**=0A+=0A+```PHP=0A+$t = =3D TRUE;=0A+if (!$t) // ...=0A+```=0A+=0A ## Multiplicative Operators=0A = =0A **Syntax**=0A =0A <!-- GRAMMAR=0A multiplicative-expression:=0A- insta= nceof-expression=0A- multiplicative-expression '*' instanceof-expression= =0A- multiplicative-expression '/' instanceof-expression=0A- multiplicati= ve-expression '%' instanceof-expression=0A+ logical-NOT-expression=0A+ mu= ltiplicative-expression '*' logical-NOT-expression=0A+ multiplicative-expr= ession '/' logical-NOT-expression=0A+ multiplicative-expression '%' logica= l-NOT-expression=0A -->=0A =0A <pre>=0A <i id=3D"grammar-multiplicative-exp= ression">multiplicative-expression:</i>=0A- <i><a href=3D"#grammar-instan= ceof-expression">instanceof-expression</a></i>=0A- <i><a href=3D"#grammar= -multiplicative-expression">multiplicative-expression</a></i> * <i><a h= ref=3D"#grammar-instanceof-expression">instanceof-expression</a></i>=0A- = <i><a href=3D"#grammar-multiplicative-expression">multiplicative-expression= </a></i> / <i><a href=3D"#grammar-instanceof-expression">instanceof-exp= ression</a></i>=0A- <i><a href=3D"#grammar-multiplicative-expression">mul= tiplicative-expression</a></i> % <i><a href=3D"#grammar-instanceof-expr= ession">instanceof-expression</a></i>=0A+ <i><a href=3D"#grammar-logical-= NOT-expression">logical-NOT-expression</a></i>=0A+ <i><a href=3D"#grammar= -multiplicative-expression">multiplicative-expression</a></i> * <i><a h= ref=3D"#grammar-logical-NOT-expression">logical-NOT-expression</a></i>=0A+ = <i><a href=3D"#grammar-multiplicative-expression">multiplicative-expressi= on</a></i> / <i><a href=3D"#grammar-logical-NOT-expression">logical-NOT= -expression</a></i>=0A+ <i><a href=3D"#grammar-multiplicative-expression"= >multiplicative-expression</a></i> % <i><a href=3D"#grammar-logical-NOT= -expression">logical-NOT-expression</a></i>=0A </pre>=0A =0A **Constraints*= *=0Adiff --git a/spec/19-grammar.md b/spec/19-grammar.md=0Aindex 08f7ac3..0= 6fcb02 100644=0A--- a/spec/19-grammar.md=0A+++ b/spec/19-grammar.md=0A@@ -5= 83,7 +583,7 @@ The grammar notation is described in [Grammars section](09-l= exical-structure.md#=0A <i><a href=3D"#grammar-unary-operator">unary-ope= rator</a></i> <i><a href=3D"#grammar-unary-expression">unary-expression</= a></i>=0A =0A <i id=3D"grammar-unary-operator">unary-operator: one of</i>= =0A- + - ! ~=0A+ + - ~=0A =0A <i id=3D"grammar-error-control-= expression">error-control-expression:</i>=0A @ <i><a href=3D"#grammar-= expression">expression</a></i>=0A@@ -605,11 +605,15 @@ The grammar notation= is described in [Grammars section](09-lexical-structure.md#=0A <i id=3D"gr= ammar-instanceof-subject">instanceof-subject:</i>=0A <i><a href=3D"#gram= mar-expression">expression</a></i>=0A =0A-<i id=3D"grammar-multiplicative-e= xpression">multiplicative-expression:</i>=0A+<i id=3D"grammar-logical-NOT-e= xpression">logical-NOT-expression:</i>=0A <i><a href=3D"#grammar-instanc= eof-expression">instanceof-expression</a></i>=0A- <i><a href=3D"#grammar-= multiplicative-expression">multiplicative-expression</a></i> * <i><a hr= ef=3D"#grammar-instanceof-expression">instanceof-expression</a></i>=0A- <= i><a href=3D"#grammar-multiplicative-expression">multiplicative-expression<= /a></i> / <i><a href=3D"#grammar-instanceof-expression">instanceof-expr= ession</a></i>=0A- <i><a href=3D"#grammar-multiplicative-expression">mult= iplicative-expression</a></i> % <i><a href=3D"#grammar-instanceof-expre= ssion">instanceof-expression</a></i>=0A+ ! <i><a href=3D"#grammar-insta= nceof-expression">instanceof-expression</a></i>=0A+=0A+<i id=3D"grammar-mul= tiplicative-expression">multiplicative-expression:</i>=0A+ <i><a href=3D"= #grammar-logical-NOT-expression">logical-NOT-expression</a></i>=0A+ <i><a= href=3D"#grammar-multiplicative-expression">multiplicative-expression</a><= /i> * <i><a href=3D"#grammar-logical-NOT-expression">logical-NOT-expres= sion</a></i>=0A+ <i><a href=3D"#grammar-multiplicative-expression">multip= licative-expression</a></i> / <i><a href=3D"#grammar-logical-NOT-expres= sion">logical-NOT-expression</a></i>=0A+ <i><a href=3D"#grammar-multiplic= ative-expression">multiplicative-expression</a></i> % <i><a href=3D"#gr= ammar-logical-NOT-expression">logical-NOT-expression</a></i>=0A =0A <i id= =3D"grammar-additive-expression">additive-expression:</i>=0A <i><a href= =3D"#grammar-multiplicative-expression">multiplicative-expression</a></i>= =0A