Magic v2: Viral value magic#24508
Conversation
f6f60ec to
e7256b0
Compare
There's a few commits before those that aren't in #24163 (I wondered where the op.c change came from.) |
| } | ||
|
|
||
| SV *ex = vmess(pat, args); | ||
| PERL_ARGS_ASSERT_VWARN; |
There was a problem hiding this comment.
The assert should be above the vmess() call, it's pointless below it.
There was a problem hiding this comment.
Oh oops. I don't recall moving that but maybe that was a recent(ish) blead fix that has been broken by some rebase operation over the past few months. I shall fix that.
Ahyes, those are some post-phase1 fixups to other files to use the new magic system in |
9d35f64 to
bc28a9c
Compare
|
Since it seems nobody's going to review this while it's drafted I shall undraft it. I don't imagine there's a danger anyone will accidentally merge it ahead of time anyway. ;) |
The existing `MAGIC` and `MGVTBL` structures are insufficiently extensible, because they lack any embedded type information, or any version numbering by which new abilities can be added in a backwards-compatible way. Commit 6d97c86 managed to free a single bit in the `mg_flags` field; it is this bit that we use to indicate that the `MAGIC` structure refers to version 2 of Magic. The new structures are defined in a way that should be much easier to permit updates in future; primarily by the presence of a version number in the `ver` field, and the set of trigger functions in the `shape` field. In this way, we hope to be able to extend the abilities of magic in the future by adding new structure shapes as well as new trigger functions.
Currently unused by the rest of the code. This commit is extracted separately simply so it can be placed at the very start of the branch. A full rebuild is needed either side of this commit, so by being at the beginning this makes rebase, bisect, and other operations easier as now you don't have to `make clean`.
Rather than put `-Wno-missing-field-initializers` in the compile flags for everything, it seems safer to ignore it just around the locations that need it.
Adds a new SVs_VMG flag + associated macros; use the SvVMAGICAL flag to fast-path sv_has_valuemagic() if appropriate Use the sv_has_valuemagic() function to know whether to call mg_propagate() in sv_setsv_flags()
Much like -DNO_TAINT_SUPPORT, this is optional and not default, but will disable value magic support in exchange for getting that little extra performance boost by not having to worry about it.
|
Are there any reviewers for this? |
| /* ideally we could just remove the magic from the SV but we don't get the SV here */ | ||
| SvREFCNT_dec(mg->mg_obj); | ||
| mg->mg_obj = NULL; | ||
|
|
||
| return 0; | ||
| MgAUXSV_set(mg, NULL); |
| GCC_DIAG_IGNORE_DECL(-Wmissing-field-initializers); | ||
| static const struct MagicFunctions magicfuncs_perlencoding = { | ||
| .ver = 2, | ||
| .shape = MGv2s_BASE, | ||
| .debug_name = "PerlIO::encoding/tag", | ||
| }; | ||
| GCC_DIAG_RESTORE_DECL; |
There was a problem hiding this comment.
Given the discussion I'm not sure this still needs to be here,
(This is a dependent PR that requires first that #24547 be merged)
A currently-draft PR that builds on top of the general "Magic v2" to add viral value magic; as outlined in PPC0036.
Note this PR currently includes all of the commits included in the first phase PR as well, so that the the actual result makes sense. I'll have to rebase it on top of blead once #24547 is merged. For review purposes, it likely makes sense to filter this PR down and look at only the final 3 commits: