Fix syntax error when using readonly with dnf - #9512

Closed
iluuu1994 wants to merge 1 commit into
php:PHP-8.2from
iluuu1994:gh-9500-fix-dnf-with-readonly
Closed

Fix syntax error when using readonly with dnf#9512
iluuu1994 wants to merge 1 commit into
php:PHP-8.2from
iluuu1994:gh-9500-fix-dnf-with-readonly

Conversation

@iluuu1994

Copy link
Copy Markdown
Member

FixesGH-9500

@GirgiasGirgias left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Other than the one question LGTM!
Thanks for helping this was really a head scratcher as I had forgotten the BC layer

Comment threadZend/tests/readonly_function.phpt Outdated

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Does using readonly () with the whitespace now break? Or is it unnecessary due to the move to the parser?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's just unnecessary since this is no longer special-cased. This should still work. I can keep it if you prefer.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No harm keeping it then :)

@iluuu1994
iluuu1994force-pushed the gh-9500-fix-dnf-with-readonly branch from 7a5aaba to 00dde7eCompareSeptember 9, 2022 12:28
@iluuu1994

Copy link
Copy Markdown
MemberAuthor

I have absolutely no clue why the pipeline failed. I could run that script locally with no problem. Rebased to try again.

@Girgias

Copy link
Copy Markdown
Member

Is there maybe some caching issue on Travis?

@cmb69

cmb69 commented Sep 9, 2022

Copy link
Copy Markdown
Member

Did you run ext/tokenizer/tokenizer_data_gen.php?

@iluuu1994

iluuu1994 commented Sep 9, 2022

Copy link
Copy Markdown
MemberAuthor

Did you run ext/tokenizer/tokenizer_data_gen.php?

No changes are generated as no token has been added/removed. This script works fine in the CI too. However, build/gen_stub.php fails on line 572.

if ($nodeinstanceofNode\NullableType) {
returnnewType(
[
...Type::fromNode($node->type)->types, // <-- Here
SimpleType::null(),
],
false
);
}

PHP Parse error: syntax error, unexpected '...' (T_ELLIPSIS), expecting ']'

Which is very strange because array_pair has not been touched, nor anything else that looks relevant. I'll reset the grammar just to see if this is actually caused by my changes, although it would be a big coincidence if it wasn't.

Edit: Yep, definitely cause by my changes 😅

@iluuu1994
iluuu1994force-pushed the gh-9500-fix-dnf-with-readonly branch 3 times, most recently from 9fbea74 to 8b18d05CompareSeptember 9, 2022 19:55
@nikic

nikic commented Sep 9, 2022

Copy link
Copy Markdown
Member

Ultimately, the core problem here is that gen_stub.php is required to be PHP 7.1 compatible, and someone introduced PHP 7.4 syntax into it. It needs to be changed to either be PHP 7.1 compatible, or the build system needs to be adjusted to not run gen_stub.php if the host PHP version is older than PHP 7.4.

@iluuu1994

iluuu1994 commented Sep 9, 2022

Copy link
Copy Markdown
MemberAuthor

@nikic Ah, thanks. I guess Travis caches the zend_language_parser.c and only generates it when the grammar has changed. But that still poses the question, how was it generated the first time when non-PHP-7.1 syntax was used? Anyway, this is probably not worth further investigating. @kocsismate Should we bump to PHP-7.4 or remove the ...?

Edit: Ah, of course. The grammar just hasn't been changed since the ... was introduced.

@iluuu1994
iluuu1994force-pushed the gh-9500-fix-dnf-with-readonly branch from 8b18d05 to 00dde7eCompareSeptember 9, 2022 20:02
@nikic

nikic commented Sep 9, 2022

Copy link
Copy Markdown
Member

I'd suggest bumping to 7.4 at this point. One must be two LTS versions behind to have something older.

Though in that case we'd also want to make more thorough use of it (yay property types).

@cmb69

cmb69 commented Sep 9, 2022

Copy link
Copy Markdown
Member

Regardless of whether we bump the PHP version requirement for gen_stubs.php, it probably makes sense to add an explicit version check, and fail fast for too old PHP versions.

@kocsismate

Copy link
Copy Markdown
Member

My plan was to bump the version requirement of gen_stub.php only for master as soon as I finish the PHP 8.2 related changes. That's why my preference would be to just replace the ... for now. But I don't mind either if we immediately require PHP 7.4 at least for the PHP-8.2 branch as well.

it probably makes sense to add an explicit version check, and fail fast for too old PHP versions.

Very good idea, 100% agreed!

@iluuu1994
iluuu1994force-pushed the gh-9500-fix-dnf-with-readonly branch from 00dde7e to f269ae3CompareSeptember 10, 2022 23:01

@nikicnikic left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LG

@SpacePossum

Copy link
Copy Markdown

Thank you all :) 🚀

readonly (B&C)|A $l;
private readonly A|(B&C) $m;
private readonly (B&C)|A $n;
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

<?phpclass A
{
readonlystatic (A&B)|C$b; // validstaticreadonly (A&B)|C$a; // invalid
}

these more simple static forms are not in the test, I haven't tested it on this PR, but just to let you know :)

jrfnl added a commit to PHPCompatibility/PHPCompatibility that referenced this pull request Dec 4, 2022
… names
PHP 8.0 introduced `match` as a new reserved keyword and `mixed` as a new "other" reserved keyword.
PHP 8.1 introduced `readonly` as a new reserved keyword, `never` as an "other" reserved keyword and `enum` as a soft reserved keyword.
Note: `readonly` has an exception for when it is used as a function declaration name.
Includes regenerated test case files.
Refs:
* https://wiki.php.net/rfc/match_expression_v2
* https://wiki.php.net/rfc/mixed_type_v2#backward_incompatible_changes
* https://wiki.php.net/rfc/readonly_properties_v2
* https://wiki.php.net/rfc/enumerations
* https://wiki.php.net/rfc/noreturn_type#backwards_incompatible_changes
* php/php-src#7468 (readonly exception in PHP 8.1)
* php/php-src#9512 (readonly exception PHP 8.2 follow-up)
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants

@iluuu1994@Girgias@cmb69@nikic@kocsismate@SpacePossum
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Fix syntax error when using readonly with dnf - #9512

Closed
iluuu1994 wants to merge 1 commit into
php:PHP-8.2from
iluuu1994:gh-9500-fix-dnf-with-readonly
Closed

Fix syntax error when using readonly with dnf#9512
iluuu1994 wants to merge 1 commit into
php:PHP-8.2from
iluuu1994:gh-9500-fix-dnf-with-readonly

Conversation

@iluuu1994

Copy link
Copy Markdown
Member

FixesGH-9500

@GirgiasGirgias left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Other than the one question LGTM!
Thanks for helping this was really a head scratcher as I had forgotten the BC layer

Comment threadZend/tests/readonly_function.phpt Outdated

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Does using readonly () with the whitespace now break? Or is it unnecessary due to the move to the parser?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's just unnecessary since this is no longer special-cased. This should still work. I can keep it if you prefer.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No harm keeping it then :)

@iluuu1994
iluuu1994force-pushed the gh-9500-fix-dnf-with-readonly branch from 7a5aaba to 00dde7eCompareSeptember 9, 2022 12:28
@iluuu1994

Copy link
Copy Markdown
MemberAuthor

I have absolutely no clue why the pipeline failed. I could run that script locally with no problem. Rebased to try again.

@Girgias

Copy link
Copy Markdown
Member

Is there maybe some caching issue on Travis?

@cmb69

cmb69 commented Sep 9, 2022

Copy link
Copy Markdown
Member

Did you run ext/tokenizer/tokenizer_data_gen.php?

@iluuu1994

iluuu1994 commented Sep 9, 2022

Copy link
Copy Markdown
MemberAuthor

Did you run ext/tokenizer/tokenizer_data_gen.php?

No changes are generated as no token has been added/removed. This script works fine in the CI too. However, build/gen_stub.php fails on line 572.

if ($nodeinstanceofNode\NullableType) {
returnnewType(
[
...Type::fromNode($node->type)->types, // <-- Here
SimpleType::null(),
],
false
);
}

PHP Parse error: syntax error, unexpected '...' (T_ELLIPSIS), expecting ']'

Which is very strange because array_pair has not been touched, nor anything else that looks relevant. I'll reset the grammar just to see if this is actually caused by my changes, although it would be a big coincidence if it wasn't.

Edit: Yep, definitely cause by my changes 😅

@iluuu1994
iluuu1994force-pushed the gh-9500-fix-dnf-with-readonly branch 3 times, most recently from 9fbea74 to 8b18d05CompareSeptember 9, 2022 19:55
@nikic

nikic commented Sep 9, 2022

Copy link
Copy Markdown
Member

Ultimately, the core problem here is that gen_stub.php is required to be PHP 7.1 compatible, and someone introduced PHP 7.4 syntax into it. It needs to be changed to either be PHP 7.1 compatible, or the build system needs to be adjusted to not run gen_stub.php if the host PHP version is older than PHP 7.4.

@iluuu1994

iluuu1994 commented Sep 9, 2022

Copy link
Copy Markdown
MemberAuthor

@nikic Ah, thanks. I guess Travis caches the zend_language_parser.c and only generates it when the grammar has changed. But that still poses the question, how was it generated the first time when non-PHP-7.1 syntax was used? Anyway, this is probably not worth further investigating. @kocsismate Should we bump to PHP-7.4 or remove the ...?

Edit: Ah, of course. The grammar just hasn't been changed since the ... was introduced.

@iluuu1994
iluuu1994force-pushed the gh-9500-fix-dnf-with-readonly branch from 8b18d05 to 00dde7eCompareSeptember 9, 2022 20:02
@nikic

nikic commented Sep 9, 2022

Copy link
Copy Markdown
Member

I'd suggest bumping to 7.4 at this point. One must be two LTS versions behind to have something older.

Though in that case we'd also want to make more thorough use of it (yay property types).

@cmb69

cmb69 commented Sep 9, 2022

Copy link
Copy Markdown
Member

Regardless of whether we bump the PHP version requirement for gen_stubs.php, it probably makes sense to add an explicit version check, and fail fast for too old PHP versions.

@kocsismate

Copy link
Copy Markdown
Member

My plan was to bump the version requirement of gen_stub.php only for master as soon as I finish the PHP 8.2 related changes. That's why my preference would be to just replace the ... for now. But I don't mind either if we immediately require PHP 7.4 at least for the PHP-8.2 branch as well.

it probably makes sense to add an explicit version check, and fail fast for too old PHP versions.

Very good idea, 100% agreed!

@iluuu1994
iluuu1994force-pushed the gh-9500-fix-dnf-with-readonly branch from 00dde7e to f269ae3CompareSeptember 10, 2022 23:01

@nikicnikic left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LG

@SpacePossum

Copy link
Copy Markdown

Thank you all :) 🚀

readonly (B&C)|A $l;
private readonly A|(B&C) $m;
private readonly (B&C)|A $n;
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

<?phpclass A
{
readonlystatic (A&B)|C$b; // validstaticreadonly (A&B)|C$a; // invalid
}

these more simple static forms are not in the test, I haven't tested it on this PR, but just to let you know :)

jrfnl added a commit to PHPCompatibility/PHPCompatibility that referenced this pull request Dec 4, 2022
… names
PHP 8.0 introduced `match` as a new reserved keyword and `mixed` as a new "other" reserved keyword.
PHP 8.1 introduced `readonly` as a new reserved keyword, `never` as an "other" reserved keyword and `enum` as a soft reserved keyword.
Note: `readonly` has an exception for when it is used as a function declaration name.
Includes regenerated test case files.
Refs:
* https://wiki.php.net/rfc/match_expression_v2
* https://wiki.php.net/rfc/mixed_type_v2#backward_incompatible_changes
* https://wiki.php.net/rfc/readonly_properties_v2
* https://wiki.php.net/rfc/enumerations
* https://wiki.php.net/rfc/noreturn_type#backwards_incompatible_changes
* php/php-src#7468 (readonly exception in PHP 8.1)
* php/php-src#9512 (readonly exception PHP 8.2 follow-up)
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants

@iluuu1994@Girgias@cmb69@nikic@kocsismate@SpacePossum
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Fix syntax error when using readonly with dnf - #9512

Closed
iluuu1994 wants to merge 1 commit into
php:PHP-8.2from
iluuu1994:gh-9500-fix-dnf-with-readonly
Closed

Fix syntax error when using readonly with dnf#9512
iluuu1994 wants to merge 1 commit into
php:PHP-8.2from
iluuu1994:gh-9500-fix-dnf-with-readonly

Conversation

@iluuu1994

Copy link
Copy Markdown
Member

FixesGH-9500

@GirgiasGirgias left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Other than the one question LGTM!
Thanks for helping this was really a head scratcher as I had forgotten the BC layer

Comment threadZend/tests/readonly_function.phpt Outdated

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Does using readonly () with the whitespace now break? Or is it unnecessary due to the move to the parser?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's just unnecessary since this is no longer special-cased. This should still work. I can keep it if you prefer.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No harm keeping it then :)

@iluuu1994
iluuu1994force-pushed the gh-9500-fix-dnf-with-readonly branch from 7a5aaba to 00dde7eCompareSeptember 9, 2022 12:28
@iluuu1994

Copy link
Copy Markdown
MemberAuthor

I have absolutely no clue why the pipeline failed. I could run that script locally with no problem. Rebased to try again.

@Girgias

Copy link
Copy Markdown
Member

Is there maybe some caching issue on Travis?

@cmb69

cmb69 commented Sep 9, 2022

Copy link
Copy Markdown
Member

Did you run ext/tokenizer/tokenizer_data_gen.php?

@iluuu1994

iluuu1994 commented Sep 9, 2022

Copy link
Copy Markdown
MemberAuthor

Did you run ext/tokenizer/tokenizer_data_gen.php?

No changes are generated as no token has been added/removed. This script works fine in the CI too. However, build/gen_stub.php fails on line 572.

if ($nodeinstanceofNode\NullableType) {
returnnewType(
[
...Type::fromNode($node->type)->types, // <-- Here
SimpleType::null(),
],
false
);
}

PHP Parse error: syntax error, unexpected '...' (T_ELLIPSIS), expecting ']'

Which is very strange because array_pair has not been touched, nor anything else that looks relevant. I'll reset the grammar just to see if this is actually caused by my changes, although it would be a big coincidence if it wasn't.

Edit: Yep, definitely cause by my changes 😅

@iluuu1994
iluuu1994force-pushed the gh-9500-fix-dnf-with-readonly branch 3 times, most recently from 9fbea74 to 8b18d05CompareSeptember 9, 2022 19:55
@nikic

nikic commented Sep 9, 2022

Copy link
Copy Markdown
Member

Ultimately, the core problem here is that gen_stub.php is required to be PHP 7.1 compatible, and someone introduced PHP 7.4 syntax into it. It needs to be changed to either be PHP 7.1 compatible, or the build system needs to be adjusted to not run gen_stub.php if the host PHP version is older than PHP 7.4.

@iluuu1994

iluuu1994 commented Sep 9, 2022

Copy link
Copy Markdown
MemberAuthor

@nikic Ah, thanks. I guess Travis caches the zend_language_parser.c and only generates it when the grammar has changed. But that still poses the question, how was it generated the first time when non-PHP-7.1 syntax was used? Anyway, this is probably not worth further investigating. @kocsismate Should we bump to PHP-7.4 or remove the ...?

Edit: Ah, of course. The grammar just hasn't been changed since the ... was introduced.

@iluuu1994
iluuu1994force-pushed the gh-9500-fix-dnf-with-readonly branch from 8b18d05 to 00dde7eCompareSeptember 9, 2022 20:02
@nikic

nikic commented Sep 9, 2022

Copy link
Copy Markdown
Member

I'd suggest bumping to 7.4 at this point. One must be two LTS versions behind to have something older.

Though in that case we'd also want to make more thorough use of it (yay property types).

@cmb69

cmb69 commented Sep 9, 2022

Copy link
Copy Markdown
Member

Regardless of whether we bump the PHP version requirement for gen_stubs.php, it probably makes sense to add an explicit version check, and fail fast for too old PHP versions.

@kocsismate

Copy link
Copy Markdown
Member

My plan was to bump the version requirement of gen_stub.php only for master as soon as I finish the PHP 8.2 related changes. That's why my preference would be to just replace the ... for now. But I don't mind either if we immediately require PHP 7.4 at least for the PHP-8.2 branch as well.

it probably makes sense to add an explicit version check, and fail fast for too old PHP versions.

Very good idea, 100% agreed!

@iluuu1994
iluuu1994force-pushed the gh-9500-fix-dnf-with-readonly branch from 00dde7e to f269ae3CompareSeptember 10, 2022 23:01

@nikicnikic left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LG

@SpacePossum

Copy link
Copy Markdown

Thank you all :) 🚀

readonly (B&C)|A $l;
private readonly A|(B&C) $m;
private readonly (B&C)|A $n;
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

<?phpclass A
{
readonlystatic (A&B)|C$b; // validstaticreadonly (A&B)|C$a; // invalid
}

these more simple static forms are not in the test, I haven't tested it on this PR, but just to let you know :)

jrfnl added a commit to PHPCompatibility/PHPCompatibility that referenced this pull request Dec 4, 2022
… names
PHP 8.0 introduced `match` as a new reserved keyword and `mixed` as a new "other" reserved keyword.
PHP 8.1 introduced `readonly` as a new reserved keyword, `never` as an "other" reserved keyword and `enum` as a soft reserved keyword.
Note: `readonly` has an exception for when it is used as a function declaration name.
Includes regenerated test case files.
Refs:
* https://wiki.php.net/rfc/match_expression_v2
* https://wiki.php.net/rfc/mixed_type_v2#backward_incompatible_changes
* https://wiki.php.net/rfc/readonly_properties_v2
* https://wiki.php.net/rfc/enumerations
* https://wiki.php.net/rfc/noreturn_type#backwards_incompatible_changes
* php/php-src#7468 (readonly exception in PHP 8.1)
* php/php-src#9512 (readonly exception PHP 8.2 follow-up)
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants

@iluuu1994@Girgias@cmb69@nikic@kocsismate@SpacePossum
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Fix syntax error when using readonly with dnf - #9512

Closed
iluuu1994 wants to merge 1 commit into
php:PHP-8.2from
iluuu1994:gh-9500-fix-dnf-with-readonly
Closed

Fix syntax error when using readonly with dnf#9512
iluuu1994 wants to merge 1 commit into
php:PHP-8.2from
iluuu1994:gh-9500-fix-dnf-with-readonly

Conversation

@iluuu1994

Copy link
Copy Markdown
Member

FixesGH-9500

@GirgiasGirgias left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Other than the one question LGTM!
Thanks for helping this was really a head scratcher as I had forgotten the BC layer

Comment threadZend/tests/readonly_function.phpt Outdated

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Does using readonly () with the whitespace now break? Or is it unnecessary due to the move to the parser?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's just unnecessary since this is no longer special-cased. This should still work. I can keep it if you prefer.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No harm keeping it then :)

@iluuu1994
iluuu1994force-pushed the gh-9500-fix-dnf-with-readonly branch from 7a5aaba to 00dde7eCompareSeptember 9, 2022 12:28
@iluuu1994

Copy link
Copy Markdown
MemberAuthor

I have absolutely no clue why the pipeline failed. I could run that script locally with no problem. Rebased to try again.

@Girgias

Copy link
Copy Markdown
Member

Is there maybe some caching issue on Travis?

@cmb69

cmb69 commented Sep 9, 2022

Copy link
Copy Markdown
Member

Did you run ext/tokenizer/tokenizer_data_gen.php?

@iluuu1994

iluuu1994 commented Sep 9, 2022

Copy link
Copy Markdown
MemberAuthor

Did you run ext/tokenizer/tokenizer_data_gen.php?

No changes are generated as no token has been added/removed. This script works fine in the CI too. However, build/gen_stub.php fails on line 572.

if ($nodeinstanceofNode\NullableType) {
returnnewType(
[
...Type::fromNode($node->type)->types, // <-- Here
SimpleType::null(),
],
false
);
}

PHP Parse error: syntax error, unexpected '...' (T_ELLIPSIS), expecting ']'

Which is very strange because array_pair has not been touched, nor anything else that looks relevant. I'll reset the grammar just to see if this is actually caused by my changes, although it would be a big coincidence if it wasn't.

Edit: Yep, definitely cause by my changes 😅

@iluuu1994
iluuu1994force-pushed the gh-9500-fix-dnf-with-readonly branch 3 times, most recently from 9fbea74 to 8b18d05CompareSeptember 9, 2022 19:55
@nikic

nikic commented Sep 9, 2022

Copy link
Copy Markdown
Member

Ultimately, the core problem here is that gen_stub.php is required to be PHP 7.1 compatible, and someone introduced PHP 7.4 syntax into it. It needs to be changed to either be PHP 7.1 compatible, or the build system needs to be adjusted to not run gen_stub.php if the host PHP version is older than PHP 7.4.

@iluuu1994

iluuu1994 commented Sep 9, 2022

Copy link
Copy Markdown
MemberAuthor

@nikic Ah, thanks. I guess Travis caches the zend_language_parser.c and only generates it when the grammar has changed. But that still poses the question, how was it generated the first time when non-PHP-7.1 syntax was used? Anyway, this is probably not worth further investigating. @kocsismate Should we bump to PHP-7.4 or remove the ...?

Edit: Ah, of course. The grammar just hasn't been changed since the ... was introduced.

@iluuu1994
iluuu1994force-pushed the gh-9500-fix-dnf-with-readonly branch from 8b18d05 to 00dde7eCompareSeptember 9, 2022 20:02
@nikic

nikic commented Sep 9, 2022

Copy link
Copy Markdown
Member

I'd suggest bumping to 7.4 at this point. One must be two LTS versions behind to have something older.

Though in that case we'd also want to make more thorough use of it (yay property types).

@cmb69

cmb69 commented Sep 9, 2022

Copy link
Copy Markdown
Member

Regardless of whether we bump the PHP version requirement for gen_stubs.php, it probably makes sense to add an explicit version check, and fail fast for too old PHP versions.

@kocsismate

Copy link
Copy Markdown
Member

My plan was to bump the version requirement of gen_stub.php only for master as soon as I finish the PHP 8.2 related changes. That's why my preference would be to just replace the ... for now. But I don't mind either if we immediately require PHP 7.4 at least for the PHP-8.2 branch as well.

it probably makes sense to add an explicit version check, and fail fast for too old PHP versions.

Very good idea, 100% agreed!

@iluuu1994
iluuu1994force-pushed the gh-9500-fix-dnf-with-readonly branch from 00dde7e to f269ae3CompareSeptember 10, 2022 23:01

@nikicnikic left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LG

@SpacePossum

Copy link
Copy Markdown

Thank you all :) 🚀

readonly (B&C)|A $l;
private readonly A|(B&C) $m;
private readonly (B&C)|A $n;
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

<?phpclass A
{
readonlystatic (A&B)|C$b; // validstaticreadonly (A&B)|C$a; // invalid
}

these more simple static forms are not in the test, I haven't tested it on this PR, but just to let you know :)

jrfnl added a commit to PHPCompatibility/PHPCompatibility that referenced this pull request Dec 4, 2022
… names
PHP 8.0 introduced `match` as a new reserved keyword and `mixed` as a new "other" reserved keyword.
PHP 8.1 introduced `readonly` as a new reserved keyword, `never` as an "other" reserved keyword and `enum` as a soft reserved keyword.
Note: `readonly` has an exception for when it is used as a function declaration name.
Includes regenerated test case files.
Refs:
* https://wiki.php.net/rfc/match_expression_v2
* https://wiki.php.net/rfc/mixed_type_v2#backward_incompatible_changes
* https://wiki.php.net/rfc/readonly_properties_v2
* https://wiki.php.net/rfc/enumerations
* https://wiki.php.net/rfc/noreturn_type#backwards_incompatible_changes
* php/php-src#7468 (readonly exception in PHP 8.1)
* php/php-src#9512 (readonly exception PHP 8.2 follow-up)
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants

@iluuu1994@Girgias@cmb69@nikic@kocsismate@SpacePossum
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Fix syntax error when using readonly with dnf - #9512

Closed
iluuu1994 wants to merge 1 commit into
php:PHP-8.2from
iluuu1994:gh-9500-fix-dnf-with-readonly
Closed

Fix syntax error when using readonly with dnf#9512
iluuu1994 wants to merge 1 commit into
php:PHP-8.2from
iluuu1994:gh-9500-fix-dnf-with-readonly

Conversation

@iluuu1994

Copy link
Copy Markdown
Member

FixesGH-9500

@GirgiasGirgias left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Other than the one question LGTM!
Thanks for helping this was really a head scratcher as I had forgotten the BC layer

Comment threadZend/tests/readonly_function.phpt Outdated

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Does using readonly () with the whitespace now break? Or is it unnecessary due to the move to the parser?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's just unnecessary since this is no longer special-cased. This should still work. I can keep it if you prefer.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No harm keeping it then :)

@iluuu1994
iluuu1994force-pushed the gh-9500-fix-dnf-with-readonly branch from 7a5aaba to 00dde7eCompareSeptember 9, 2022 12:28
@iluuu1994

Copy link
Copy Markdown
MemberAuthor

I have absolutely no clue why the pipeline failed. I could run that script locally with no problem. Rebased to try again.

@Girgias

Copy link
Copy Markdown
Member

Is there maybe some caching issue on Travis?

@cmb69

cmb69 commented Sep 9, 2022

Copy link
Copy Markdown
Member

Did you run ext/tokenizer/tokenizer_data_gen.php?

@iluuu1994

iluuu1994 commented Sep 9, 2022

Copy link
Copy Markdown
MemberAuthor

Did you run ext/tokenizer/tokenizer_data_gen.php?

No changes are generated as no token has been added/removed. This script works fine in the CI too. However, build/gen_stub.php fails on line 572.

if ($nodeinstanceofNode\NullableType) {
returnnewType(
[
...Type::fromNode($node->type)->types, // <-- Here
SimpleType::null(),
],
false
);
}

PHP Parse error: syntax error, unexpected '...' (T_ELLIPSIS), expecting ']'

Which is very strange because array_pair has not been touched, nor anything else that looks relevant. I'll reset the grammar just to see if this is actually caused by my changes, although it would be a big coincidence if it wasn't.

Edit: Yep, definitely cause by my changes 😅

@iluuu1994
iluuu1994force-pushed the gh-9500-fix-dnf-with-readonly branch 3 times, most recently from 9fbea74 to 8b18d05CompareSeptember 9, 2022 19:55
@nikic

nikic commented Sep 9, 2022

Copy link
Copy Markdown
Member

Ultimately, the core problem here is that gen_stub.php is required to be PHP 7.1 compatible, and someone introduced PHP 7.4 syntax into it. It needs to be changed to either be PHP 7.1 compatible, or the build system needs to be adjusted to not run gen_stub.php if the host PHP version is older than PHP 7.4.

@iluuu1994

iluuu1994 commented Sep 9, 2022

Copy link
Copy Markdown
MemberAuthor

@nikic Ah, thanks. I guess Travis caches the zend_language_parser.c and only generates it when the grammar has changed. But that still poses the question, how was it generated the first time when non-PHP-7.1 syntax was used? Anyway, this is probably not worth further investigating. @kocsismate Should we bump to PHP-7.4 or remove the ...?

Edit: Ah, of course. The grammar just hasn't been changed since the ... was introduced.

@iluuu1994
iluuu1994force-pushed the gh-9500-fix-dnf-with-readonly branch from 8b18d05 to 00dde7eCompareSeptember 9, 2022 20:02
@nikic

nikic commented Sep 9, 2022

Copy link
Copy Markdown
Member

I'd suggest bumping to 7.4 at this point. One must be two LTS versions behind to have something older.

Though in that case we'd also want to make more thorough use of it (yay property types).

@cmb69

cmb69 commented Sep 9, 2022

Copy link
Copy Markdown
Member

Regardless of whether we bump the PHP version requirement for gen_stubs.php, it probably makes sense to add an explicit version check, and fail fast for too old PHP versions.

@kocsismate

Copy link
Copy Markdown
Member

My plan was to bump the version requirement of gen_stub.php only for master as soon as I finish the PHP 8.2 related changes. That's why my preference would be to just replace the ... for now. But I don't mind either if we immediately require PHP 7.4 at least for the PHP-8.2 branch as well.

it probably makes sense to add an explicit version check, and fail fast for too old PHP versions.

Very good idea, 100% agreed!

@iluuu1994
iluuu1994force-pushed the gh-9500-fix-dnf-with-readonly branch from 00dde7e to f269ae3CompareSeptember 10, 2022 23:01

@nikicnikic left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LG

@SpacePossum

Copy link
Copy Markdown

Thank you all :) 🚀

readonly (B&C)|A $l;
private readonly A|(B&C) $m;
private readonly (B&C)|A $n;
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

<?phpclass A
{
readonlystatic (A&B)|C$b; // validstaticreadonly (A&B)|C$a; // invalid
}

these more simple static forms are not in the test, I haven't tested it on this PR, but just to let you know :)

jrfnl added a commit to PHPCompatibility/PHPCompatibility that referenced this pull request Dec 4, 2022
… names
PHP 8.0 introduced `match` as a new reserved keyword and `mixed` as a new "other" reserved keyword.
PHP 8.1 introduced `readonly` as a new reserved keyword, `never` as an "other" reserved keyword and `enum` as a soft reserved keyword.
Note: `readonly` has an exception for when it is used as a function declaration name.
Includes regenerated test case files.
Refs:
* https://wiki.php.net/rfc/match_expression_v2
* https://wiki.php.net/rfc/mixed_type_v2#backward_incompatible_changes
* https://wiki.php.net/rfc/readonly_properties_v2
* https://wiki.php.net/rfc/enumerations
* https://wiki.php.net/rfc/noreturn_type#backwards_incompatible_changes
* php/php-src#7468 (readonly exception in PHP 8.1)
* php/php-src#9512 (readonly exception PHP 8.2 follow-up)
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants

@iluuu1994@Girgias@cmb69@nikic@kocsismate@SpacePossum
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Fix syntax error when using readonly with dnf - #9512

Closed
iluuu1994 wants to merge 1 commit into
php:PHP-8.2from
iluuu1994:gh-9500-fix-dnf-with-readonly
Closed

Fix syntax error when using readonly with dnf#9512
iluuu1994 wants to merge 1 commit into
php:PHP-8.2from
iluuu1994:gh-9500-fix-dnf-with-readonly

Conversation

@iluuu1994

Copy link
Copy Markdown
Member

FixesGH-9500

@GirgiasGirgias left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Other than the one question LGTM!
Thanks for helping this was really a head scratcher as I had forgotten the BC layer

Comment threadZend/tests/readonly_function.phpt Outdated

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Does using readonly () with the whitespace now break? Or is it unnecessary due to the move to the parser?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's just unnecessary since this is no longer special-cased. This should still work. I can keep it if you prefer.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No harm keeping it then :)

@iluuu1994
iluuu1994force-pushed the gh-9500-fix-dnf-with-readonly branch from 7a5aaba to 00dde7eCompareSeptember 9, 2022 12:28
@iluuu1994

Copy link
Copy Markdown
MemberAuthor

I have absolutely no clue why the pipeline failed. I could run that script locally with no problem. Rebased to try again.

@Girgias

Copy link
Copy Markdown
Member

Is there maybe some caching issue on Travis?

@cmb69

cmb69 commented Sep 9, 2022

Copy link
Copy Markdown
Member

Did you run ext/tokenizer/tokenizer_data_gen.php?

@iluuu1994

iluuu1994 commented Sep 9, 2022

Copy link
Copy Markdown
MemberAuthor

Did you run ext/tokenizer/tokenizer_data_gen.php?

No changes are generated as no token has been added/removed. This script works fine in the CI too. However, build/gen_stub.php fails on line 572.

if ($nodeinstanceofNode\NullableType) {
returnnewType(
[
...Type::fromNode($node->type)->types, // <-- Here
SimpleType::null(),
],
false
);
}

PHP Parse error: syntax error, unexpected '...' (T_ELLIPSIS), expecting ']'

Which is very strange because array_pair has not been touched, nor anything else that looks relevant. I'll reset the grammar just to see if this is actually caused by my changes, although it would be a big coincidence if it wasn't.

Edit: Yep, definitely cause by my changes 😅

@iluuu1994
iluuu1994force-pushed the gh-9500-fix-dnf-with-readonly branch 3 times, most recently from 9fbea74 to 8b18d05CompareSeptember 9, 2022 19:55
@nikic

nikic commented Sep 9, 2022

Copy link
Copy Markdown
Member

Ultimately, the core problem here is that gen_stub.php is required to be PHP 7.1 compatible, and someone introduced PHP 7.4 syntax into it. It needs to be changed to either be PHP 7.1 compatible, or the build system needs to be adjusted to not run gen_stub.php if the host PHP version is older than PHP 7.4.

@iluuu1994

iluuu1994 commented Sep 9, 2022

Copy link
Copy Markdown
MemberAuthor

@nikic Ah, thanks. I guess Travis caches the zend_language_parser.c and only generates it when the grammar has changed. But that still poses the question, how was it generated the first time when non-PHP-7.1 syntax was used? Anyway, this is probably not worth further investigating. @kocsismate Should we bump to PHP-7.4 or remove the ...?

Edit: Ah, of course. The grammar just hasn't been changed since the ... was introduced.

@iluuu1994
iluuu1994force-pushed the gh-9500-fix-dnf-with-readonly branch from 8b18d05 to 00dde7eCompareSeptember 9, 2022 20:02
@nikic

nikic commented Sep 9, 2022

Copy link
Copy Markdown
Member

I'd suggest bumping to 7.4 at this point. One must be two LTS versions behind to have something older.

Though in that case we'd also want to make more thorough use of it (yay property types).

@cmb69

cmb69 commented Sep 9, 2022

Copy link
Copy Markdown
Member

Regardless of whether we bump the PHP version requirement for gen_stubs.php, it probably makes sense to add an explicit version check, and fail fast for too old PHP versions.

@kocsismate

Copy link
Copy Markdown
Member

My plan was to bump the version requirement of gen_stub.php only for master as soon as I finish the PHP 8.2 related changes. That's why my preference would be to just replace the ... for now. But I don't mind either if we immediately require PHP 7.4 at least for the PHP-8.2 branch as well.

it probably makes sense to add an explicit version check, and fail fast for too old PHP versions.

Very good idea, 100% agreed!

@iluuu1994
iluuu1994force-pushed the gh-9500-fix-dnf-with-readonly branch from 00dde7e to f269ae3CompareSeptember 10, 2022 23:01

@nikicnikic left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LG

@SpacePossum

Copy link
Copy Markdown

Thank you all :) 🚀

readonly (B&C)|A $l;
private readonly A|(B&C) $m;
private readonly (B&C)|A $n;
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

<?phpclass A
{
readonlystatic (A&B)|C$b; // validstaticreadonly (A&B)|C$a; // invalid
}

these more simple static forms are not in the test, I haven't tested it on this PR, but just to let you know :)

jrfnl added a commit to PHPCompatibility/PHPCompatibility that referenced this pull request Dec 4, 2022
… names
PHP 8.0 introduced `match` as a new reserved keyword and `mixed` as a new "other" reserved keyword.
PHP 8.1 introduced `readonly` as a new reserved keyword, `never` as an "other" reserved keyword and `enum` as a soft reserved keyword.
Note: `readonly` has an exception for when it is used as a function declaration name.
Includes regenerated test case files.
Refs:
* https://wiki.php.net/rfc/match_expression_v2
* https://wiki.php.net/rfc/mixed_type_v2#backward_incompatible_changes
* https://wiki.php.net/rfc/readonly_properties_v2
* https://wiki.php.net/rfc/enumerations
* https://wiki.php.net/rfc/noreturn_type#backwards_incompatible_changes
* php/php-src#7468 (readonly exception in PHP 8.1)
* php/php-src#9512 (readonly exception PHP 8.2 follow-up)
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants

@iluuu1994@Girgias@cmb69@nikic@kocsismate@SpacePossum
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Fix syntax error when using readonly with dnf - #9512

Closed
iluuu1994 wants to merge 1 commit into
php:PHP-8.2from
iluuu1994:gh-9500-fix-dnf-with-readonly
Closed

Fix syntax error when using readonly with dnf#9512
iluuu1994 wants to merge 1 commit into
php:PHP-8.2from
iluuu1994:gh-9500-fix-dnf-with-readonly

Conversation

@iluuu1994

Copy link
Copy Markdown
Member

FixesGH-9500

@GirgiasGirgias left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Other than the one question LGTM!
Thanks for helping this was really a head scratcher as I had forgotten the BC layer

Comment threadZend/tests/readonly_function.phpt Outdated

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Does using readonly () with the whitespace now break? Or is it unnecessary due to the move to the parser?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's just unnecessary since this is no longer special-cased. This should still work. I can keep it if you prefer.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No harm keeping it then :)

@iluuu1994
iluuu1994force-pushed the gh-9500-fix-dnf-with-readonly branch from 7a5aaba to 00dde7eCompareSeptember 9, 2022 12:28
@iluuu1994

Copy link
Copy Markdown
MemberAuthor

I have absolutely no clue why the pipeline failed. I could run that script locally with no problem. Rebased to try again.

@Girgias

Copy link
Copy Markdown
Member

Is there maybe some caching issue on Travis?

@cmb69

cmb69 commented Sep 9, 2022

Copy link
Copy Markdown
Member

Did you run ext/tokenizer/tokenizer_data_gen.php?

@iluuu1994

iluuu1994 commented Sep 9, 2022

Copy link
Copy Markdown
MemberAuthor

Did you run ext/tokenizer/tokenizer_data_gen.php?

No changes are generated as no token has been added/removed. This script works fine in the CI too. However, build/gen_stub.php fails on line 572.

if ($nodeinstanceofNode\NullableType) {
returnnewType(
[
...Type::fromNode($node->type)->types, // <-- Here
SimpleType::null(),
],
false
);
}

PHP Parse error: syntax error, unexpected '...' (T_ELLIPSIS), expecting ']'

Which is very strange because array_pair has not been touched, nor anything else that looks relevant. I'll reset the grammar just to see if this is actually caused by my changes, although it would be a big coincidence if it wasn't.

Edit: Yep, definitely cause by my changes 😅

@iluuu1994
iluuu1994force-pushed the gh-9500-fix-dnf-with-readonly branch 3 times, most recently from 9fbea74 to 8b18d05CompareSeptember 9, 2022 19:55
@nikic

nikic commented Sep 9, 2022

Copy link
Copy Markdown
Member

Ultimately, the core problem here is that gen_stub.php is required to be PHP 7.1 compatible, and someone introduced PHP 7.4 syntax into it. It needs to be changed to either be PHP 7.1 compatible, or the build system needs to be adjusted to not run gen_stub.php if the host PHP version is older than PHP 7.4.

@iluuu1994

iluuu1994 commented Sep 9, 2022

Copy link
Copy Markdown
MemberAuthor

@nikic Ah, thanks. I guess Travis caches the zend_language_parser.c and only generates it when the grammar has changed. But that still poses the question, how was it generated the first time when non-PHP-7.1 syntax was used? Anyway, this is probably not worth further investigating. @kocsismate Should we bump to PHP-7.4 or remove the ...?

Edit: Ah, of course. The grammar just hasn't been changed since the ... was introduced.

@iluuu1994
iluuu1994force-pushed the gh-9500-fix-dnf-with-readonly branch from 8b18d05 to 00dde7eCompareSeptember 9, 2022 20:02
@nikic

nikic commented Sep 9, 2022

Copy link
Copy Markdown
Member

I'd suggest bumping to 7.4 at this point. One must be two LTS versions behind to have something older.

Though in that case we'd also want to make more thorough use of it (yay property types).

@cmb69

cmb69 commented Sep 9, 2022

Copy link
Copy Markdown
Member

Regardless of whether we bump the PHP version requirement for gen_stubs.php, it probably makes sense to add an explicit version check, and fail fast for too old PHP versions.

@kocsismate

Copy link
Copy Markdown
Member

My plan was to bump the version requirement of gen_stub.php only for master as soon as I finish the PHP 8.2 related changes. That's why my preference would be to just replace the ... for now. But I don't mind either if we immediately require PHP 7.4 at least for the PHP-8.2 branch as well.

it probably makes sense to add an explicit version check, and fail fast for too old PHP versions.

Very good idea, 100% agreed!

@iluuu1994
iluuu1994force-pushed the gh-9500-fix-dnf-with-readonly branch from 00dde7e to f269ae3CompareSeptember 10, 2022 23:01

@nikicnikic left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LG

@SpacePossum

Copy link
Copy Markdown

Thank you all :) 🚀

readonly (B&C)|A $l;
private readonly A|(B&C) $m;
private readonly (B&C)|A $n;
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

<?phpclass A
{
readonlystatic (A&B)|C$b; // validstaticreadonly (A&B)|C$a; // invalid
}

these more simple static forms are not in the test, I haven't tested it on this PR, but just to let you know :)

jrfnl added a commit to PHPCompatibility/PHPCompatibility that referenced this pull request Dec 4, 2022
… names
PHP 8.0 introduced `match` as a new reserved keyword and `mixed` as a new "other" reserved keyword.
PHP 8.1 introduced `readonly` as a new reserved keyword, `never` as an "other" reserved keyword and `enum` as a soft reserved keyword.
Note: `readonly` has an exception for when it is used as a function declaration name.
Includes regenerated test case files.
Refs:
* https://wiki.php.net/rfc/match_expression_v2
* https://wiki.php.net/rfc/mixed_type_v2#backward_incompatible_changes
* https://wiki.php.net/rfc/readonly_properties_v2
* https://wiki.php.net/rfc/enumerations
* https://wiki.php.net/rfc/noreturn_type#backwards_incompatible_changes
* php/php-src#7468 (readonly exception in PHP 8.1)
* php/php-src#9512 (readonly exception PHP 8.2 follow-up)
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants

@iluuu1994@Girgias@cmb69@nikic@kocsismate@SpacePossum
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Fix syntax error when using readonly with dnf - #9512

Closed
iluuu1994 wants to merge 1 commit into
php:PHP-8.2from
iluuu1994:gh-9500-fix-dnf-with-readonly
Closed

Fix syntax error when using readonly with dnf#9512
iluuu1994 wants to merge 1 commit into
php:PHP-8.2from
iluuu1994:gh-9500-fix-dnf-with-readonly

Conversation

@iluuu1994

Copy link
Copy Markdown
Member

FixesGH-9500

@GirgiasGirgias left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Other than the one question LGTM!
Thanks for helping this was really a head scratcher as I had forgotten the BC layer

Comment threadZend/tests/readonly_function.phpt Outdated

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Does using readonly () with the whitespace now break? Or is it unnecessary due to the move to the parser?

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's just unnecessary since this is no longer special-cased. This should still work. I can keep it if you prefer.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No harm keeping it then :)

@iluuu1994
iluuu1994force-pushed the gh-9500-fix-dnf-with-readonly branch from 7a5aaba to 00dde7eCompareSeptember 9, 2022 12:28
@iluuu1994

Copy link
Copy Markdown
MemberAuthor

I have absolutely no clue why the pipeline failed. I could run that script locally with no problem. Rebased to try again.

@Girgias

Copy link
Copy Markdown
Member

Is there maybe some caching issue on Travis?

@cmb69

cmb69 commented Sep 9, 2022

Copy link
Copy Markdown
Member

Did you run ext/tokenizer/tokenizer_data_gen.php?

@iluuu1994

iluuu1994 commented Sep 9, 2022

Copy link
Copy Markdown
MemberAuthor

Did you run ext/tokenizer/tokenizer_data_gen.php?

No changes are generated as no token has been added/removed. This script works fine in the CI too. However, build/gen_stub.php fails on line 572.

if ($nodeinstanceofNode\NullableType) {
returnnewType(
[
...Type::fromNode($node->type)->types, // <-- Here
SimpleType::null(),
],
false
);
}

PHP Parse error: syntax error, unexpected '...' (T_ELLIPSIS), expecting ']'

Which is very strange because array_pair has not been touched, nor anything else that looks relevant. I'll reset the grammar just to see if this is actually caused by my changes, although it would be a big coincidence if it wasn't.

Edit: Yep, definitely cause by my changes 😅

@iluuu1994
iluuu1994force-pushed the gh-9500-fix-dnf-with-readonly branch 3 times, most recently from 9fbea74 to 8b18d05CompareSeptember 9, 2022 19:55
@nikic

nikic commented Sep 9, 2022

Copy link
Copy Markdown
Member

Ultimately, the core problem here is that gen_stub.php is required to be PHP 7.1 compatible, and someone introduced PHP 7.4 syntax into it. It needs to be changed to either be PHP 7.1 compatible, or the build system needs to be adjusted to not run gen_stub.php if the host PHP version is older than PHP 7.4.

@iluuu1994

iluuu1994 commented Sep 9, 2022

Copy link
Copy Markdown
MemberAuthor

@nikic Ah, thanks. I guess Travis caches the zend_language_parser.c and only generates it when the grammar has changed. But that still poses the question, how was it generated the first time when non-PHP-7.1 syntax was used? Anyway, this is probably not worth further investigating. @kocsismate Should we bump to PHP-7.4 or remove the ...?

Edit: Ah, of course. The grammar just hasn't been changed since the ... was introduced.

@iluuu1994
iluuu1994force-pushed the gh-9500-fix-dnf-with-readonly branch from 8b18d05 to 00dde7eCompareSeptember 9, 2022 20:02
@nikic

nikic commented Sep 9, 2022

Copy link
Copy Markdown
Member

I'd suggest bumping to 7.4 at this point. One must be two LTS versions behind to have something older.

Though in that case we'd also want to make more thorough use of it (yay property types).

@cmb69

cmb69 commented Sep 9, 2022

Copy link
Copy Markdown
Member

Regardless of whether we bump the PHP version requirement for gen_stubs.php, it probably makes sense to add an explicit version check, and fail fast for too old PHP versions.

@kocsismate

Copy link
Copy Markdown
Member

My plan was to bump the version requirement of gen_stub.php only for master as soon as I finish the PHP 8.2 related changes. That's why my preference would be to just replace the ... for now. But I don't mind either if we immediately require PHP 7.4 at least for the PHP-8.2 branch as well.

it probably makes sense to add an explicit version check, and fail fast for too old PHP versions.

Very good idea, 100% agreed!

@iluuu1994
iluuu1994force-pushed the gh-9500-fix-dnf-with-readonly branch from 00dde7e to f269ae3CompareSeptember 10, 2022 23:01

@nikicnikic left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LG

@SpacePossum

Copy link
Copy Markdown

Thank you all :) 🚀

readonly (B&C)|A $l;
private readonly A|(B&C) $m;
private readonly (B&C)|A $n;
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

<?phpclass A
{
readonlystatic (A&B)|C$b; // validstaticreadonly (A&B)|C$a; // invalid
}

these more simple static forms are not in the test, I haven't tested it on this PR, but just to let you know :)

jrfnl added a commit to PHPCompatibility/PHPCompatibility that referenced this pull request Dec 4, 2022
… names
PHP 8.0 introduced `match` as a new reserved keyword and `mixed` as a new "other" reserved keyword.
PHP 8.1 introduced `readonly` as a new reserved keyword, `never` as an "other" reserved keyword and `enum` as a soft reserved keyword.
Note: `readonly` has an exception for when it is used as a function declaration name.
Includes regenerated test case files.
Refs:
* https://wiki.php.net/rfc/match_expression_v2
* https://wiki.php.net/rfc/mixed_type_v2#backward_incompatible_changes
* https://wiki.php.net/rfc/readonly_properties_v2
* https://wiki.php.net/rfc/enumerations
* https://wiki.php.net/rfc/noreturn_type#backwards_incompatible_changes
* php/php-src#7468 (readonly exception in PHP 8.1)
* php/php-src#9512 (readonly exception PHP 8.2 follow-up)
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants

@iluuu1994@Girgias@cmb69@nikic@kocsismate@SpacePossum