Repository: VKCOM/noverify
Pull request #870 (2020-12-23 13:40:42)

embeddedrules: added precedence rules for ??
```
$_ [==, !=, ===, !==, <, >, <=, >=] $_ ?? $_
```


Patch:
diff --git a/src/cmd/embeddedrules/rules.go b/src/cmd/embeddedrules/rules.go
index bde7072..eb5cfb4 100644
--- a/src/cmd/embeddedrules/rules.go
+++ b/src/cmd/embeddedrules/rules.go
@@ -77,7 +77,7 @@ func (fi bindataFileInfo) Sys() interface{} {
 	return nil
 }
 
-var _embeddedrulesRulesPhp = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xb4\x98\xdf\x6f\xdb\x38\x12\xc7\xdf\x03\xe4\x7f\x18\x1b\xaa\x63\xa7\xb6\x75\x45\xdf\x92\x38\xe9\x5d\x9f\x0e\x28\x2e\x40\x0f\x7d\x5a\xb4\x0e\x25\x8d\x2c\x36\x32\xa9\x25\xa9\xc4\xda\x28\xff\xfb\x82\xa2\x24\xcb\x12\xfd\x43\x4d\xb7\x40\x1d\x7b\x34\xe4\xe7\xcb\x19\x92\x43\xf1\xe6\x2e\x89\x92\xf3\xb3\xf3\x33\xf7\xf2\xf2\xfc\x0c\x2e\xe1\x13\xe3\x94\xc9\x04\x7d\x45\x39\x83\x7f\x7f\xf9\x62\xac\x31\x65\x0a\x05\x98\x7f\x01\x95\xc4\x8b\x51\x3f\x71\x77\xda\xfa\x7c\xbd\x46\xa6\xe0\x2b\x26\x5c\x28\x50\x28\x18\x11\x19\xe0\x26\x11\x28\x25\xe5\x4c\x82\x8a\x88\x02\x9f\x30\xf0\x10\x24\x5d\x27\x31\x0d\x29\x06\x73\xd3\xde\xc3\x90\x0b\x04\x70\x36\x70\xa7\x3f\xae\xc0\xc9\xcc\x13\x12\x1a\xbc\x7e\x52\x59\xdd\xf3\xb3\x30\x65\x46\x68\x89\xfa\xbf\xe9\x31\x1b\x4f\xe0\xe5\xfc\x0c\xc0\x28\x03\xdd\xc3\x9a\x64\x1e\x82\xcf\xd3\x38\x00\x81\x49\x4c\x7c\x04\x15\x61\x2d\xf2\x99\xaa\x08\x7e\xa6\x52\x81\xe3\x73\x16\x54\xcd\x54\x96\x20\x78\x9c\xc7\x4d\xb3\xab\xff\x14\xbf\xe1\x0e\x94\x48\x11\xae\x20\x24\xb1\xc4\x6b\x1d\x8e\x03\xd8\x67\x41\x15\x02\x91\xf0\x30\xd6\x7d\x4e\x8a\x3e\x1e\x76\x58\x30\xf8\x07\x68\x55\xd8\x6a\x54\x48\x37\xcd\x58\x16\xb6\x24\x15\x08\xce\xa6\x09\x6d\xe4\xa1\x1f\xec\xce\x06\xbb\xab\x61\x45\xef\x54\x4a\x54\x63\x67\x33\xd9\x81\xbc\x1e\x9a\x51\x09\x57\xc8\x14\x25\x31\xf0\x04\x05\x29\x52\x9f\x08\xf4\x31\x40\xe6\xa3\xee\x31\x45\xd9\x9d\x4c\x23\x70\xd6\x44\x3e\xc2\x62\x01\xff\xba\x06\xd7\xd5\x5f\x22\x22\x21\xa2\xab\x08\x45\xb3\x07\x15\x11\x06\xa3\xdd\x39\x37\xde\xf6\x30\x29\xba\x68\x4f\xbe\x6d\xfb\x7a\xde\xb9\xf0\x3f\xae\xf0\x0a\x9e\x51\x4f\x36\x2d\xfd\xa1\xa1\x63\xb0\xd0\xe1\xd1\xc1\x22\x1d\xf9\x80\x4f\xc8\xca\x3e\x68\x08\xb4\x5e\x2d\x3e\x49\x57\x91\x32\xf3\xf4\x41\x4f\x15\x3f\x42\xff\xf1\x3e\x79\x28\xd7\x94\xfe\x25\xc1\xe3\x2a\x32\xc1\x31\xd3\xc7\x75\x41\xfb\x4a\x28\x26\x1c\x50\x09\x8c\x2b\x20\xb0\xe2\x3c\xa8\xfc\x20\xe4\x02\x3c\xaa\x9e\xa9\xc4\x6d\x60\x27\x73\xd3\xbe\xec\xc5\x64\x80\xb2\x15\x3c\x50\xf6\x44\x62\x1a\x98\x8e\xa7\x7a\x79\xa3\xaf\x30\x00\x96\xae\x3d\x14\x10\xf2\x94\x05\xc5\x9a\x79\x00\x2a\xcb\xe6\x9a\x5a\xe8\x8c\x30\x4e\xc2\x34\x9e\x82\x87\x3e\x49\xa5\x59\x84\x82\x73\x05\x3c\x2c\xbe\x27\x82\x7b\x31\xae\xb5\xd4\x6d\x6c\x4a\x2d\xf0\xdf\x26\x1a\x88\x40\x20\x20\x50\xa6\x71\xd9\x9c\xa8\x79\x3d\x4f\xe1\xd3\x33\x11\x4c\x2b\x3e\x92\xee\x72\x3e\x12\x96\x2d\xf1\xcf\xa5\x47\x15\x61\xc1\x95\x49\x24\x80\xb3\xd4\xcd\x9d\xa5\x4e\xde\xf2\xba\xb6\x8d\xea\x07\x85\xed\xb5\xc3\x1c\x9c\xcc\x64\x56\xe8\x60\x1f\x74\x70\x00\xba\xe8\x33\xd2\x8f\xd6\xa1\xee\x1f\xeb\xc1\xc1\xf6\x19\xad\x0d\x3c\xd8\x0b\x1e\xec\x80\x7b\xe6\x36\xef\xe4\x96\x8b\x6e\x6a\xf3\x1d\x6a\xfe\xb6\xd4\xe6\xdd\xd4\xee\x32\x07\xfb\x98\x6f\xc8\x6c\xde\xcd\x6c\x7b\xa0\xfb\x47\xfa\xeb\x89\xcd\x2d\x89\x6d\x0f\x76\xff\x68\x9b\xdc\x83\xdb\x3e\x91\x92\xae\x98\xb6\x9c\x7e\x80\x58\xe8\x8f\xf7\xa6\xa6\xb4\x4e\x10\xef\x17\x95\xb9\xb9\x8b\x1b\xc8\x7d\x72\xf4\xec\xb0\x53\xe9\x8a\xbe\xda\x95\xae\x30\x1e\x2c\xab\x4d\x75\xa7\xc3\x66\x36\xd8\xec\x34\xd8\xac\x2f\xec\xd2\x06\xbb\x3c\x0d\x76\xd9\x17\xe6\xda\x60\xee\x69\x30\xb7\x2f\xec\x9d\x0d\xf6\xee\x34\xd8\xbb\xbe\xb0\x91\x0d\x36\x3a\x0d\x36\xea\x0b\xcb\x6d\xb0\xfc\x34\x58\xde\x17\xf6\xc3\x06\xfb\x71\x1a\xec\x47\x5f\xd8\xcd\x8d\x8d\x66\xac\xc7\x71\x37\x37\x7d\x79\xb7\xb7\x36\x9e\xb1\x1e\xe7\xdd\xde\xf6\xe5\xcd\x6d\xb8\xf9\x69\xb4\x79\xff\xe3\xb9\x8d\x66\xac\xc7\x71\xc5\x39\xbe\xc7\x49\x3d\x0c\x67\x5e\x36\xe3\x0c\x61\x4d\xa5\x22\x8f\xdd\x13\x3a\xf9\xc3\xe7\x29\x53\x63\x87\x4c\xbe\xb7\x76\xeb\xc6\xa3\xd9\x87\xef\xed\x3d\x9b\x87\xe1\x7f\xb2\x0f\x96\x1d\xbb\xaa\x5f\xfa\x30\x49\xbc\x38\x03\xfd\xfe\xca\x02\x0c\x40\x71\xd0\xa7\xce\xa2\xd7\xd9\x87\xe2\x0c\xce\x80\xb2\x00\x37\xcd\x70\x40\x8b\x0d\x33\x28\xe8\x75\x2c\x9a\x92\xbb\xb1\x3f\x8a\x97\xf4\x2f\xe4\xe1\x51\xbe\x71\xdb\x23\x60\xfb\xf0\xfb\xb1\x6c\xc8\x54\x26\xd4\xa7\x3c\xd5\x67\xe6\x55\x6a\x2a\x29\x17\x01\x8a\x56\x2a\xa4\x12\x09\x97\xe3\x0b\xf7\x62\x0a\x8e\x9c\xec\x26\xa3\x7c\xe8\xc8\x29\x5c\xb8\x17\x93\x4e\x01\x15\x2b\x79\xaf\xfb\x3c\x94\x8f\x6a\x5a\x14\x31\xf1\xb9\x10\xe8\x2b\x88\x48\x26\x15\xf1\x1f\x41\xbf\x8c\x30\xc4\x20\xc6\xb6\xce\xc6\xd0\xf5\x61\xa3\x6a\xb1\x34\xde\xf5\x89\xa3\x92\xf8\x32\xf4\x23\x22\x86\xaf\x53\x70\x5e\x86\x97\xc3\xd7\xc9\x75\xfd\x9c\x1e\x73\x38\xd2\x43\xea\x49\x25\x96\x65\xf6\x5f\x86\x52\x75\x9c\x5e\xf7\xcf\x07\xeb\xf0\xcb\xeb\x88\x22\x61\x3a\x02\x32\xf5\x7e\x6a\xfb\xfe\x10\x24\x02\x57\xcb\xb2\xd9\xd8\x59\x4e\xa1\xf8\x6f\x11\xf3\x2b\x3a\x8c\x06\x25\xb4\xe3\xe1\x2c\xe8\x40\x94\x8d\x9a\x19\xb0\x29\xdb\x1b\xed\x8e\xf3\x70\xf8\xb6\x68\x06\x18\xd3\x35\xd5\x33\xf6\xa4\x71\xe0\x26\x89\x79\x50\xe2\x6d\x3a\x4f\x5d\x58\xa9\x24\x2b\xd4\x6f\xa1\x9d\x37\xe9\xf6\x7e\x47\x43\x18\x3b\x54\x7e\xfb\xfa\x45\x57\xf8\x27\x14\x34\xcc\x26\x30\x9f\xcf\x77\x97\x5b\xd3\xad\xeb\xd7\x5c\x79\x25\xf1\x3e\x91\x07\x96\xde\x37\x89\x01\x8c\x5a\xea\xb8\x00\xfe\x84\xc2\xdc\x70\x95\xd7\x01\x72\x0a\x09\x8a\x88\x24\x52\x73\xa9\xac\x37\xaf\xbb\xf6\x29\x66\xd4\xa8\x17\x8d\x8b\xb2\x8d\xc5\x96\xed\x16\x12\xfb\xc9\x66\x47\x6a\xde\x4f\x6a\x9e\x1f\x92\x9a\xe7\xbf\x2c\x35\x3f\xa1\xda\xf9\x24\x8e\xfb\x5f\x73\x52\xb6\x24\x42\x90\x6c\xec\x3c\x4e\xa1\xf8\xb6\x7c\xc4\x4c\x8e\x1d\x15\x51\x39\xbb\x0d\x88\x22\x93\xd6\x16\x5c\x7b\x2d\x71\x43\xa5\x92\x45\xd3\xa6\x7f\x7b\x6a\x68\x65\x47\x6f\x45\x3f\x17\x87\x84\x52\x67\xa6\x6b\x94\x85\x83\xd9\x14\x9c\x02\xd0\xa8\x52\xc7\xfc\xcc\x45\xdf\x76\x9c\xfa\x61\x73\xa4\x64\x72\x74\x89\x31\xae\x66\x7a\x15\xfb\x6a\x86\x8c\xa7\xab\x08\x7c\xbe\x4e\x88\xa0\xd2\xb2\xb2\x2a\xd2\xf0\x39\x22\x6a\x68\xa9\x61\x16\x8f\x69\x71\xa9\xda\x89\x9c\x61\x7e\x5e\xd7\x2f\x84\xdb\xc0\xed\x4c\x56\xc6\x59\xa9\xaf\x21\x0c\xc6\xba\xca\x2f\x16\x8b\x49\xd5\xc0\x35\x5f\xcc\x0b\x7a\x4a\xe2\x7a\xc3\xdc\xde\x44\x68\x19\xd7\x5b\x63\x71\xd5\xbb\x7d\x49\x6e\x7a\x56\xd7\xbf\x95\xb5\xf8\xbd\xc7\x97\xa5\x71\xdc\x30\xea\x9f\x3b\x9e\xe5\xfe\x7a\x7c\x74\xe5\x56\x7a\x68\x90\xe5\x3a\x2a\x3d\xcb\xd5\xd5\xb5\x67\xad\xa0\x14\x47\xcb\xc5\x76\x4b\xe8\x1f\xe9\x81\x3d\xd2\x8c\x2b\x7b\xb4\x07\xf6\x68\x0f\xba\x11\x1c\xec\x8b\xb6\xdd\xd7\x16\xed\xc1\x6f\x8c\xf6\xe0\xed\xd1\x76\x36\xe6\x02\xfa\x70\xb0\x3f\x8a\xa0\xae\x9a\xba\xaa\x55\x0b\x07\xd6\xa9\x54\x7a\x5b\x2b\x02\xf6\x1c\x21\xab\x34\xb2\x55\x89\x94\x7b\x84\x78\x2d\x21\xdb\x7d\xc1\xd3\xa5\x7f\xd2\x4f\x90\xd9\x46\x24\x12\xe1\x47\xbf\x51\x54\xb3\xdb\x86\xb0\xd7\xf3\xb3\xbf\x03\x00\x00\xff\xff\xa4\x4e\x82\x0b\x2c\x1b\x00\x00")
+var _embeddedrulesRulesPhp = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xb4\x99\x5b\x8f\xdb\x36\x16\xc7\xdf\x07\x98\xef\x70\x6c\x28\x8e\x3d\xf5\x65\x83\xbe\x65\x7c\xe9\x6e\x9f\x16\x08\x36\x40\x17\x7d\x5a\x24\x1e\x4a\x3a\xb2\xd8\x91\x49\x2d\x49\x65\xac\x8d\xe7\xbb\x2f\x28\x4a\xb2\x2c\xd1\xba\x64\xda\x02\x9d\xd8\xe4\xe1\xf9\xfd\x79\x0e\xef\x5e\xef\xe2\x30\xbe\xbf\xbb\xbf\x5b\x3d\x3c\xdc\xdf\xc1\x03\xfc\xc2\x38\x65\x32\x46\x4f\x51\xce\xe0\xef\x9f\x3e\x99\xd2\x88\x32\x85\x02\xcc\x7f\x3e\x95\xc4\x8d\x50\xd7\xac\xae\xda\x7a\xfc\x78\x44\xa6\xe0\x37\x8c\xb9\x50\xa0\x50\x30\x22\x52\xc0\x53\x2c\x50\x4a\xca\x99\x04\x15\x12\x05\x1e\x61\xe0\x22\x48\x7a\x8c\x23\x1a\x50\xf4\x97\xa6\xbd\x8b\x01\x17\x08\xe0\x9c\x60\xa7\xff\x7c\x04\x27\x35\x35\x24\x30\x78\x5d\x53\x94\xae\xee\xef\x82\x84\x19\xa1\x39\xea\xdf\xc6\x63\x3a\x9d\xc1\xf7\xfb\x3b\x00\xa3\x0c\xb4\x87\x23\x49\x5d\x04\x8f\x27\x91\x0f\x02\xe3\x88\x78\x08\x2a\xc4\x52\xe4\x0b\x55\x21\xfc\x91\x48\x05\x8e\xc7\x99\x5f\x34\x53\x69\x8c\xe0\x72\x1e\x55\x8b\x57\xfa\x9f\xec\x3b\xec\x40\x89\x04\xe1\x23\x04\x24\x92\xf8\xa8\xc3\xd1\x82\x7d\x11\x54\x21\x10\x09\x4f\x53\xed\x73\x96\xf9\x78\xba\x62\xc1\xe8\x2f\xa0\x15\x61\x2b\x51\x01\x3d\x55\x63\x99\x95\xc5\x89\x40\x70\x4e\x55\x68\x25\x0f\xc3\x60\x3b\x1b\x6c\x57\xc2\x32\xef\x54\x4a\x54\x53\xe7\x34\xbb\x82\xbc\xb6\x8d\xa8\x98\x2b\x64\x8a\x92\x08\x78\x8c\x82\x64\xa9\x8f\x05\x7a\xe8\x23\xf3\x50\x7b\x4c\x50\x36\x07\xd3\x04\x9c\x23\x91\xcf\xb0\xd9\xc0\xdf\x1e\x61\xb5\xd2\x1f\x42\x22\x21\xa4\x87\x10\x45\xd5\x83\x0a\x09\x83\xc9\xf5\x98\x9b\x5e\x3c\xcc\x32\x17\xf5\xc1\x77\x69\x5f\x8e\xbb\x15\xfc\x8b\x2b\xfc\x08\x2f\xa8\x07\x9b\x96\xfe\x54\xd1\x31\xda\xe8\xf0\xe8\x60\x91\x86\x7c\xc0\x6f\xc8\x72\x1f\x34\x00\x5a\xce\x16\x8f\x24\x87\x50\x99\x71\xfa\xa4\x87\x8a\x17\xa2\xf7\xfc\x39\x7e\xca\xe7\x94\xfe\x26\xc1\xe5\x2a\x34\xc1\x31\xc3\x67\xb5\x02\x6d\x2b\x21\x1b\x70\x40\x25\x30\xae\x80\xc0\x81\x73\xbf\xb0\x83\x80\x0b\x70\xa9\x7a\xa1\x12\x2f\x81\x9d\x2d\x4d\xfb\xdc\x8b\xc9\x00\x65\x07\x78\xa2\xec\x1b\x89\xa8\x6f\x1c\xcf\xf5\xf4\x46\x4f\xa1\x0f\x2c\x39\xba\x28\x20\xe0\x09\xf3\xb3\x39\xf3\x04\x54\xe6\xcd\x35\x35\xd3\x19\x62\x14\x07\x49\x34\x07\x17\x3d\x92\x48\x33\x09\x05\xe7\x0a\x78\x90\x7d\x8e\x05\x77\x23\x3c\x6a\xa9\x97\xd8\xe4\x5a\xe0\x9f\x55\x34\x10\x81\x40\x40\xa0\x4c\xa2\xbc\x39\x51\xcb\x72\x9c\xc2\x2f\x2f\x44\x30\xad\xb8\x23\xdd\xf9\x78\x24\x2c\xdd\xe3\x7f\xf7\x2e\x55\x84\xf9\x1f\x4d\x22\x01\x9c\xbd\x6e\xee\xec\x75\xf2\xf6\x8f\x65\xd9\xa4\xac\xc8\xca\x5e\x1b\xcc\x51\x6f\x26\xb3\x42\x47\xb7\xa0\xa3\x16\xe8\x66\x48\x4f\x7f\xb6\x76\xf5\x76\x5f\x5b\x3b\x3b\xa4\xb7\x36\xf0\xe8\x26\x78\x74\x05\x1e\x98\xdb\x73\x23\xb7\x5c\x34\x53\x7b\xbe\xa2\x9e\xdf\x96\xda\x73\x33\xb5\xd7\xcc\xd1\x2d\xe6\x1b\x32\x7b\x6e\x66\xb6\xde\xd1\xdb\x3d\xfd\xf1\xc4\x9e\x2d\x89\xad\x77\xf6\x76\x6f\x3b\xf2\xda\x4a\xde\xed\x8a\x3d\xaa\xec\x9b\xde\x5f\xf6\x8f\x16\x57\x1d\x9d\xa8\xba\x1a\x75\xb8\x1a\x22\xaa\x43\x53\x7f\x49\xad\x8e\xb6\x7d\xfd\x6c\xdb\xdd\xf4\xd6\xb3\x6d\xd7\xb3\xee\xeb\x67\xdd\xee\xa6\xb7\x9e\xf5\x95\x9e\xd6\xe3\x03\x91\x92\x1e\x98\x2e\xe9\x7f\x10\xdd\xe8\x3f\x3f\x99\xb3\x49\xed\x24\xfa\xd3\xa6\x28\xae\x9e\x06\x0c\xe4\x73\xdc\x79\x06\xbd\x3a\x31\x65\xbe\xea\x27\xa6\xac\xb0\xf5\x78\x56\x55\xd7\x1f\xb6\xb0\xc1\x16\xfd\x60\x8b\xa1\xb0\x07\x1b\xec\xa1\x1f\xec\x61\x28\x6c\x65\x83\xad\xfa\xc1\x56\x43\x61\xef\x6c\xb0\x77\xfd\x60\xef\x86\xc2\x26\x36\xd8\xa4\x1f\x6c\x32\x14\x76\xb6\xc1\xce\xfd\x60\xe7\xa1\xb0\xaf\x36\xd8\xd7\x7e\xb0\xaf\x43\x61\xeb\xb5\x8d\x66\x4a\xbb\x71\xeb\xf5\x50\xde\x76\x6b\xe3\x99\xd2\x6e\xde\x76\x3b\x94\xb7\xb4\xe1\x96\xfd\x68\xcb\xe1\xd7\x3c\x1b\xcd\x94\x76\xe3\xb2\xfb\xe0\x80\x1b\x5f\x10\x2c\xdc\x74\xc1\x19\xc2\x91\x4a\x45\x9e\x9b\x37\x3d\xf2\x1f\x8f\x27\x4c\x4d\x1d\x32\xfb\x52\x5b\xad\x2b\x55\x8b\x0f\x5f\xea\x6b\x36\x0f\x82\x7f\xa4\x1f\x2c\x2b\x76\xb1\x1d\xe9\x4b\x09\x71\xa3\x14\x28\x53\xc8\x7c\xf4\x41\x71\xd0\xb7\x97\xcc\xeb\xe2\x43\x76\x97\x63\x40\x99\x8f\xa7\x6a\x38\xa0\xc6\x86\x05\x64\xf4\x32\x16\x55\xc9\xcd\xd8\x77\xe2\x25\xfd\x1f\xf2\xa0\x93\x6f\xcc\x6e\x08\xb8\x54\x7e\xe9\xca\x86\x4c\x64\x4c\x3d\xca\x13\x7d\xf7\x3a\x24\x66\x27\xe5\xc2\x47\x51\x4b\x85\x54\x22\xe6\x72\xfa\x7e\xf5\x7e\x0e\x8e\x9c\x5d\x27\x23\xaf\x74\xe4\x1c\xde\xaf\xde\xcf\x1a\x1b\xa8\x38\xc8\xcf\xda\x67\x5b\x3e\x8a\x61\x91\xc5\xc4\xe3\x42\xa0\xa7\x20\x24\xa9\x54\xc4\x7b\x06\x7d\xa9\x65\x88\x7e\x84\x75\x9d\x95\xae\xeb\x43\x6b\xd1\x62\x6f\xac\xcb\x93\x6b\x21\xf1\xfb\xd8\x0b\x89\x18\xbf\xce\xc1\xf9\x3e\x7e\x18\xbf\xce\x1e\xcb\x7a\xda\x65\xd0\xe1\x21\x71\xa5\x12\xfb\x3c\xfb\xdf\xc7\x52\x35\x8c\x5e\x6f\x8f\x07\x6b\xf7\xf3\x67\xad\x2c\x61\x3a\x02\x32\x71\xff\xd0\xe5\xb7\x43\x10\x0b\x3c\xec\xf3\x66\x53\x67\x3f\x87\xec\x7f\x8b\x98\x1f\xd1\x61\x34\x28\xa1\x0d\xdb\xb3\xa0\x03\x91\x37\xaa\x66\xc0\xa6\xec\x66\xb4\x1b\xc6\xe3\xf1\xdb\xa2\xe9\x63\x44\x8f\x54\x8f\xd8\x5e\xfd\xc0\x53\x1c\x71\x3f\xc7\xdb\x74\xf6\x9d\x58\x89\x24\x07\x04\x1e\x34\x5f\x64\xea\xeb\x1d\x0d\x60\xea\x50\xf9\xfb\x6f\x9f\xf4\x0e\xff\x0d\x05\x0d\xd2\x19\x2c\x97\xcb\xeb\xe9\x56\x35\x6b\xda\x55\x67\x5e\x4e\xfc\x1c\xcb\x96\xa9\xf7\xbb\x44\x1f\x26\x35\x75\x5c\x00\xff\x86\xc2\xbc\x94\xe6\xcf\x4a\x72\x0e\x31\x8a\x90\xc4\x52\x73\xa9\x2c\x17\xaf\x5d\xfd\x14\x33\xa9\xec\x17\x95\x07\xd7\x93\xa5\x2c\xbd\xde\x48\xec\x27\x9b\x2b\xa9\xe7\x61\x52\xcf\xe7\x36\xa9\xe7\xf3\x0f\x4b\x3d\xf7\xd8\xed\x3c\x12\x45\xc3\x9f\xcb\x29\xdb\x13\x21\x48\x3a\x75\x9e\xe7\x90\x7d\xda\x3f\x63\x2a\xa7\x8e\x0a\xa9\x5c\x6c\x7d\xa2\xc8\xac\xb6\x04\x97\x56\x7b\x3c\x51\xa9\x64\xd6\xb4\x6a\x5f\x1f\x1a\x5a\x59\xe7\xeb\xfa\xaf\xd9\x21\x21\xd7\x99\xea\x3d\xca\xc2\xc1\x74\x0e\x4e\x06\xa8\xec\x52\x5d\x76\xe6\xc1\xf8\xd2\x4f\x5d\x59\xed\x29\x99\x75\x4e\x31\xc6\xd5\x42\xcf\x62\x4f\x2d\x90\xf1\xe4\x10\x82\xc7\x8f\x31\x11\x54\x5a\x66\x56\x41\x1a\xbf\x84\x44\x8d\x2d\x7b\x98\xc5\x62\x9e\x3d\xce\x37\x22\x67\x98\xbf\x1e\xcb\x0b\xe1\x25\x70\x57\x83\x95\x71\x96\xeb\xab\x08\x83\xa9\xde\xe5\x37\x9b\xcd\xac\x68\xb0\x32\x1f\xcc\x43\x4f\x42\xa2\x72\xc1\xbc\xbc\x68\x69\x19\x8f\x97\xc2\xec\x27\x83\xcb\x63\x4b\xd5\xb2\xf8\x19\xa1\x28\xcd\xbe\xdf\xb0\x65\x49\x14\x55\x0a\xf5\xd7\x2b\xcb\x7c\x7d\xed\xee\x5d\xbe\x94\xb6\x75\x32\x9f\x47\xb9\x65\x3e\xbb\x9a\xe5\x69\x2d\x28\xd9\xd1\x72\x73\x59\x12\x86\x47\x7a\x64\x8f\x34\xe3\xca\x1e\xed\x91\x3d\xda\xa3\x66\x04\x47\xb7\xa2\x6d\xb7\xb5\x45\x7b\xf4\x27\x46\x7b\xf4\xf6\x68\x3b\x27\xf3\x43\x46\x7b\xb0\x7f\x16\x7e\xb9\x6b\xea\x5d\xad\x98\x38\x70\x4c\xa4\xd2\xcb\x5a\x16\xb0\x97\x10\x59\xa1\x91\x1d\x72\xa4\xbc\x21\xc4\xad\x09\xb9\xac\x0b\xae\xde\xfa\x67\xc3\x04\x99\x65\x44\x22\x11\x5e\xf8\x27\x8a\xaa\xba\xad\x08\x7b\xbd\xbf\xfb\x7f\x00\x00\x00\xff\xff\x0a\x5b\x9e\xe7\x74\x1d\x00\x00")
 
 func embeddedrulesRulesPhpBytes() ([]byte, error) {
 	return bindataRead(
diff --git a/src/cmd/embeddedrules/rules.php b/src/cmd/embeddedrules/rules.php
index 540e4a0..f41d24a 100644
--- a/src/cmd/embeddedrules/rules.php
+++ b/src/cmd/embeddedrules/rules.php
@@ -92,6 +92,30 @@ function precedence() {
     $_ !== $_ | $_;
     $_ | $_ !== $_;
   }
+
+  /** @warning === has higher precedence than ?? */
+  $_ === $_ ?? $_;
+
+  /** @warning !== has higher precedence than ?? */
+  $_ !== $_ ?? $_;
+
+  /** @warning == has higher precedence than ?? */
+  $_ == $_ ?? $_;
+
+  /** @warning != has higher precedence than ?? */
+  $_ != $_ ?? $_;
+
+  /** @warning > has higher precedence than ?? */
+  $_ > $_ ?? $_;
+
+  /** @warning >= has higher precedence than ?? */
+  $_ >= $_ ?? $_;
+
+  /** @warning < has higher precedence than ?? */
+  $_ < $_ ?? $_;
+
+  /** @warning <= has higher precedence than ?? */
+  $_ <= $_ ?? $_;
 }
 
 /**


Test patch:
diff --git a/src/tests/golden/testdata/embeddedrules/golden.txt b/src/tests/golden/testdata/embeddedrules/golden.txt
index 4880a73..fcf74a6 100644
--- a/src/tests/golden/testdata/embeddedrules/golden.txt
+++ b/src/tests/golden/testdata/embeddedrules/golden.txt
@@ -100,28 +100,52 @@ WARNING precedence: === has higher precedence than | at testdata/embeddedrules/p
 WARNING precedence: !== has higher precedence than | at testdata/embeddedrules/precedence.php:12
   $_ = 0 !== $mask | $x;
        ^^^^^^^^^^^^^^^^
-WARNING precedence: == has higher precedence than & at testdata/embeddedrules/precedence.php:16
+WARNING precedence: > has higher precedence than ?? at testdata/embeddedrules/precedence.php:14
+  $_ = $mask > $z ?? $x;
+       ^^^^^^^^^^^^^^^^
+WARNING precedence: < has higher precedence than ?? at testdata/embeddedrules/precedence.php:15
+  $_ = $mask < $z ?? $x;
+       ^^^^^^^^^^^^^^^^
+WARNING precedence: <= has higher precedence than ?? at testdata/embeddedrules/precedence.php:16
+  $_ = $mask <= $z ?? $x;
+       ^^^^^^^^^^^^^^^^^
+WARNING precedence: >= has higher precedence than ?? at testdata/embeddedrules/precedence.php:17
+  $_ = $mask >= $z ?? $x;
+       ^^^^^^^^^^^^^^^^^
+WARNING precedence: == has higher precedence than ?? at testdata/embeddedrules/precedence.php:18
+  $_ = $mask == $z ?? $x;
+       ^^^^^^^^^^^^^^^^^
+WARNING precedence: != has higher precedence than ?? at testdata/embeddedrules/precedence.php:19
+  $_ = $mask != $z ?? $x;
+       ^^^^^^^^^^^^^^^^^
+WARNING precedence: === has higher precedence than ?? at testdata/embeddedrules/precedence.php:20
+  $_ = $mask === $z ?? $x;
+       ^^^^^^^^^^^^^^^^^^
+WARNING precedence: !== has higher precedence than ?? at testdata/embeddedrules/precedence.php:21
+  $_ = $mask !== $z ?? $x;
+       ^^^^^^^^^^^^^^^^^^
+WARNING precedence: == has higher precedence than & at testdata/embeddedrules/precedence.php:25
   $_ = $x & $mask == 0;
        ^^^^^^^^^^^^^^^
-WARNING precedence: != has higher precedence than & at testdata/embeddedrules/precedence.php:17
+WARNING precedence: != has higher precedence than & at testdata/embeddedrules/precedence.php:26
   $_ = $x & $mask != 0;
        ^^^^^^^^^^^^^^^
-WARNING precedence: === has higher precedence than & at testdata/embeddedrules/precedence.php:18
+WARNING precedence: === has higher precedence than & at testdata/embeddedrules/precedence.php:27
   $_ = $x & $mask === 0;
        ^^^^^^^^^^^^^^^^
-WARNING precedence: !== has higher precedence than & at testdata/embeddedrules/precedence.php:19
+WARNING precedence: !== has higher precedence than & at testdata/embeddedrules/precedence.php:28
   $_ = $x & $mask !== 0;
        ^^^^^^^^^^^^^^^^
-WARNING precedence: == has higher precedence than | at testdata/embeddedrules/precedence.php:21
+WARNING precedence: == has higher precedence than | at testdata/embeddedrules/precedence.php:30
   $_ = $x | $mask == 0;
        ^^^^^^^^^^^^^^^
-WARNING precedence: != has higher precedence than | at testdata/embeddedrules/precedence.php:22
+WARNING precedence: != has higher precedence than | at testdata/embeddedrules/precedence.php:31
   $_ = $x | $mask != 0;
        ^^^^^^^^^^^^^^^
-WARNING precedence: === has higher precedence than | at testdata/embeddedrules/precedence.php:23
+WARNING precedence: === has higher precedence than | at testdata/embeddedrules/precedence.php:32
   $_ = $x | $mask === 0;
        ^^^^^^^^^^^^^^^^
-WARNING precedence: !== has higher precedence than | at testdata/embeddedrules/precedence.php:24
+WARNING precedence: !== has higher precedence than | at testdata/embeddedrules/precedence.php:33
   $_ = $x | $mask !== 0;
        ^^^^^^^^^^^^^^^^
 WARNING strictCmp: non-strict comparison (use ===) at testdata/embeddedrules/strictCmp.php:6
diff --git a/src/tests/golden/testdata/embeddedrules/precedence.php b/src/tests/golden/testdata/embeddedrules/precedence.php
index d467663..d937a22 100644
--- a/src/tests/golden/testdata/embeddedrules/precedence.php
+++ b/src/tests/golden/testdata/embeddedrules/precedence.php
@@ -1,6 +1,6 @@
 <?php
 
-function precedence_lhs($x, $mask) {
+function precedence_lhs($x, $mask, $z) {
   $_ = 0 == $mask & $x;
   $_ = 0 != $mask & $x;
   $_ = 0 === $mask & $x;
@@ -10,6 +10,15 @@ function precedence_lhs($x, $mask) {
   $_ = 0 != $mask | $x;
   $_ = 0 === $mask | $x;
   $_ = 0 !== $mask | $x;
+
+  $_ = $mask > $z ?? $x;
+  $_ = $mask < $z ?? $x;
+  $_ = $mask <= $z ?? $x;
+  $_ = $mask >= $z ?? $x;
+  $_ = $mask == $z ?? $x;
+  $_ = $mask != $z ?? $x;
+  $_ = $mask === $z ?? $x;
+  $_ = $mask !== $z ?? $x;
 }
 
 function precedence_rhs($x, $mask) {
@@ -41,7 +50,7 @@ function precedence_rhs_good($x, $mask) {
   $_ = 0x02 & (precedence_foo() !== 0);
 }
 
-function precedence_lhs_good($x, $mask) {
+function precedence_lhs_good($x, $mask, $z) {
   $_ = 0 == ($mask & $x);
   $_ = 0 != ($mask & $x);
   $_ = 0 === ($mask & $x);
@@ -54,4 +63,22 @@ function precedence_lhs_good($x, $mask) {
 
   $_ = (($x & $mask) != 0) | 0x02;
   $_ = (precedence_foo() !== 0) & 0x02;
+
+  $_ = $x ?? $mask > $z;
+  $_ = $x ?? $mask >= $z;
+  $_ = $x ?? $mask < $z;
+  $_ = $x ?? $mask <= $z;
+  $_ = $x ?? $mask == $z;
+  $_ = $x ?? $mask != $z;
+  $_ = $x ?? $mask === $z;
+  $_ = $x ?? $mask !== $z;
+
+  $_ = ($mask > $z) ?? $x;
+  $_ = ($mask >= $z) ?? $x;
+  $_ = ($mask < $z) ?? $x;
+  $_ = ($mask <= $z) ?? $x;
+  $_ = ($mask == $z) ?? $x;
+  $_ = ($mask != $z) ?? $x;
+  $_ = ($mask === $z) ?? $x;
+  $_ = ($mask !== $z) ?? $x;
 }