{"push_id":786748581,"size":58,"distinct_size":8,"ref":"refs/heads/feature/CM-712-cperl-types-proto","head":"0984708df2fd5cfd8dd6310b195e0a2637678048","before":"9dfe8b090ec1384a9da26716340676af5fe516e0","commits":[{"sha":"24ad142894fd93e29ff586cd4bff87923484d128","author":{"email":"b3538261d0c0bffcce3d04dcc48be08a7393a14f@cpanel.net","name":"Reini Urban"},"message":"types: add u_multiply to promote multiply\n\nanalog to u_add. these are the two only exceptions for constant\nintegers which do promote to UVs, useful for large constants.\nOnly t/op/inc.t which tests UV overflow to NV had to be changed\nto use NV context.","distinct":false,"url":"https://api.github.com/repos/perl11/cperl/commits/24ad142894fd93e29ff586cd4bff87923484d128"},{"sha":"ef941f5b5097fea60bc0cae9a91b52eef8920d05","author":{"email":"b3538261d0c0bffcce3d04dcc48be08a7393a14f@cpanel.net","name":"Reini Urban"},"message":"types: fix ck_type for S? ops\n\narith ops with optional args, like abs, exp need not\nhave kids, they take PL_defgv ($_) then, which is untyped.\n\nFixes occasional lib/B/Deparse-core.t crashes","distinct":false,"url":"https://api.github.com/repos/perl11/cperl/commits/ef941f5b5097fea60bc0cae9a91b52eef8920d05"},{"sha":"c8dd6b255b0027085de350a96630ef8eddaab24a","author":{"email":"b3538261d0c0bffcce3d04dcc48be08a7393a14f@cpanel.net","name":"Reini Urban"},"message":"sized arrays: run-time part, my @a[20]\n\nsized arrays cannot grow beyond the declared size and cannot be magic.\nThe declared size is always equal to the actual size, the array is pre-filled\nwith undef.\nthus sized arrays are faster to access at run-time than aelemfast (constant indices),\nbut this name is already taken.\n\nadd 2 new ops: aelemsize_const for constant indices, similar to aelemfast_lex,\nand aelemsize for variable indices.\nconstant indices are already compile-time checked, there is no need to\nbounds-check and check magic at run-time.\nNote that aelemsize_const can also be used for non-constants but\ntypechecked indices.\n\naccess to non-existing indices result in a die with PL_no_aelem.\nthese can be yet unassigned indices or indices beyond the declared size.\n\nnegative indices for constants are resolved at compile-time, as the\nactual size is already known then, so we can omit the check for negative indices\nat run-time.\nInstead of being pre-filled with &PL_sv_undef we could imagine dying on access\non an unassigned index.\n\nWithout AELEMSIZE_RT_NEGATIVE the declared size is always equal to the actual size.\nTo allow the actual size (AvFILL) deviate from the declared size (AvMAX)\nbut this causes a slower run-time access for constant indices. (percent?)\n\nAdd the 2 new ops to Opcodes in tag :base_core\n\nuse feature \"sized_arrays\"\n\nThere is no number-only token yet, needed for the const part.\nBut THING is good enough for literals, like IV, NV and \"str\",\neven - is disallowed already.\nSet the type already at the parse, because the targ is\nallocated.\n\nadd Perl_av_init_sized\n\nwith coretype support and native types.\nprotect native sized arrays from being cleared:\nSvREADONLY for sized and also !AvREAL for native","distinct":false,"url":"https://api.github.com/repos/perl11/cperl/commits/c8dd6b255b0027085de350a96630ef8eddaab24a"},{"sha":"f613a96b16e57eae957cfbee5a9b32d7179bc3a3","author":{"email":"b3538261d0c0bffcce3d04dcc48be08a7393a14f@cpanel.net","name":"Reini Urban"},"message":"shaped arrays: rename from sized arrays\n\nRationale: Discussion with #perl6. They named it shaped because this fits\nbetter for multidimensial arrays.  We will eventually add multidim also, and\nit is less confusing for the casual user of cperl and perl6 then.\nEven if \"shaped\" reminds me on \"shaved\", and \"sized\" is easier to pronounce\nand remember. \"shaped\" are only structs, but not arrays. Oh well.\nif multi, they are multi-sized.\n\nAdd more samples to the feature docs, but it should be in perldata.\n\nshaped arrays: add unchecked op variants as _u\n\nharmonize the names for the unchecked variants for all types.\nuse the _u suffix.\nimplemented for native and boxed typed, but not yet\nused (enabled in the compiler)\n\nshaped arrays: fix init_shaped, add t/op/aelem_u.t\n\njust fixed the native type check.\nscalar does not work yet.\n\nnot native tests yet, as the compiler does not add the box ops, and uses\nthe new ops yet.\neven the current tests still use the old aelemfast_lex ops, not the\nnew typed ones.\n\nshaped arrays: compile-time check out of bounds\n\nadd ck_aelem, add SHAPED flag to sv_dump.\ncheck shaped array indices at compile-time.\n\nTODO: promote the aelem ops if shaped or typed.\n\nshaped array: compile-time check invalid ops\n\nThrow \"Invalid modification of shaped array: op var\"\n\nDetect shape modifying ops: shift, unshift, pop, push.\nbut for unshift, push only the 0 and 1 arg cases yet.\nsplice is only checked at run-time, as we would need to check many\nconst args.\nDisable the temp. SvREADONLY so we can assign now.\n\ndo not initialize the shaped array with undef, as it is readonly.\nrather use the magic NULL value.\n\nadd run-time errors for the compile-time counterparts.\nNote that the var name is not yet fixed there.\n\nenable ck_pad for padav also, coming only from newAVREF, via PADANY.\nbut the op is not chained yet.\n\ncompile to aelemfast_lex_u.\nflip negative constant indices to positive and allow max 255,\nnot just 127.\n\non lval return an empty sv body to be filled in as in aelemfast,\nwhich is just an optimized padav. needed e.g. for sassign lval.\nThis is the inlined behaviour of aelemfast_lex, with ignoring magic,\nav_fetch and bounds checks.\n\naelem_u: add OPpMAYBE_LVSUB to op_private\nthis private bit is allowed, the others not.","distinct":false,"url":"https://api.github.com/repos/perl11/cperl/commits/f613a96b16e57eae957cfbee5a9b32d7179bc3a3"},{"sha":"526ee301a26d07a9c71a7b7795ebb7b115b32aa5","author":{"email":"b3538261d0c0bffcce3d04dcc48be08a7393a14f@cpanel.net","name":"Reini Urban"},"message":"shaped arrays: re-enable multideref aelem optim\n\nimprove the old PL_check[o->op_type] != Perl_ck_null check\nto check for ext/arybase ck_ overrides in maybe_multideref().\nWe use now our own ck_aelem.\nAnd we dont need to skip on helem with arybase.\n\nThis fixes the ext/B/t/f_sort.t regression.","distinct":false,"url":"https://api.github.com/repos/perl11/cperl/commits/526ee301a26d07a9c71a7b7795ebb7b115b32aa5"},{"sha":"93846f24e9c21dfe9939f2d7506b7bd11450b8e6","author":{"email":"b3538261d0c0bffcce3d04dcc48be08a7393a14f@cpanel.net","name":"Reini Urban"},"message":"shaped arrays: fix porting/args_assert.t","distinct":false,"url":"https://api.github.com/repos/perl11/cperl/commits/93846f24e9c21dfe9939f2d7506b7bd11450b8e6"},{"sha":"5a323383efa6827b9a9400963ed641781c940cba","author":{"email":"b3538261d0c0bffcce3d04dcc48be08a7393a14f@cpanel.net","name":"Reini Urban"},"message":"shaped arrays: fix t/porting/podcheck.t","distinct":false,"url":"https://api.github.com/repos/perl11/cperl/commits/5a323383efa6827b9a9400963ed641781c940cba"},{"sha":"9851fb46b8220f8798de4fd9cf266ba296730da0","author":{"email":"b3538261d0c0bffcce3d04dcc48be08a7393a14f@cpanel.net","name":"Reini Urban"},"message":"shaped arrays: fix t/porting/diag.t\n\nadd exceptions for test problems with the\nnew shaped array diagnostics.","distinct":false,"url":"https://api.github.com/repos/perl11/cperl/commits/9851fb46b8220f8798de4fd9cf266ba296730da0"},{"sha":"a0ce792ce9c3ac6a47f03fcf5ed6270d224812e1","author":{"email":"b3538261d0c0bffcce3d04dcc48be08a7393a14f@cpanel.net","name":"Reini Urban"},"message":"loop out-of-bounds: optimize loops with static arylen\n\nwhen the loop is bound by arylen, like for (0..$#a) { $a[$_] }\nthe array accesses in the body can use the unchecked aelem_u\nversions.\ncheck right array and index.\nonly try to optimize AELEM, not constant indices, and\nMULTIDEREF is not optimized yet.\n\navoid slow aelem private bits. do not optimize then.\nTODO: magic av allowed with _u? for now not checked.","distinct":false,"url":"https://api.github.com/repos/perl11/cperl/commits/a0ce792ce9c3ac6a47f03fcf5ed6270d224812e1"},{"sha":"195edf64b2834cca980e5eedde5d25c6066458e9","author":{"email":"b3538261d0c0bffcce3d04dcc48be08a7393a14f@cpanel.net","name":"Reini Urban"},"message":"shaped arrays: convert my num to Num on 32-bit\n\nwarn only with use warnings \"misc\";","distinct":false,"url":"https://api.github.com/repos/perl11/cperl/commits/195edf64b2834cca980e5eedde5d25c6066458e9"},{"sha":"81a9c83d65da02975d6e6f77b511e737214e226c","author":{"email":"b3538261d0c0bffcce3d04dcc48be08a7393a14f@cpanel.net","name":"Reini Urban"},"message":"array: help branch prediction\n\nadd a couple of UNLIKELY to branches, to prefetch the hot code.\nadd a couple of missing shaped array runtime errors.","distinct":false,"url":"https://api.github.com/repos/perl11/cperl/commits/81a9c83d65da02975d6e6f77b511e737214e226c"},{"sha":"f6dbe324993ac52ec4c6b07c39fb07ddd3395c4c","author":{"email":"b3538261d0c0bffcce3d04dcc48be08a7393a14f@cpanel.net","name":"Reini Urban"},"message":"shaped array: update t/porting/diag.t, now warning\n\nmy num @a[5] on 32 bit is no fatal error anymore. Will be demoted to Num\nand will warn with use warnings 'misc'.","distinct":false,"url":"https://api.github.com/repos/perl11/cperl/commits/f6dbe324993ac52ec4c6b07c39fb07ddd3395c4c"},{"sha":"e37292217dc0cb6d66858f3673687bb2411c590d","author":{"email":"b3538261d0c0bffcce3d04dcc48be08a7393a14f@cpanel.net","name":"Reini Urban"},"message":"opcodes: downgrade ops, negative variant offsets\n\nadd OP_TYPE_DOWNVARIANT macros, besides OP_TYPE_UPVARIANT and\nfor all OP_TYPE_VARIANT.\nmove some ops down to bring the variants nearer together, max 128 distance.\ncalculate the down variants also, to downgrade typed variants to their base\ntypes. int_op => i_op => op\n\nrefactor opcode.pl for OP_HAS_LIST/OP_HAS_BOXRET\nmoved initialized structs to opcode.h, static definitions into opnames.h\ngenerate most OC/OA defines dynamically, put all OP_IS_ tests into\nopnames.h, remove 3 unneeded opflags (for native types), ignore the old\nremoved i (RETINT) flag (we do it differently, but restored the\nintegerization functionality from 2002 removed with e7311069, with\nexceptions for _I_DIVIDE and I_MODULO) and get room for 5 args\nagain (msgrcv, sockpair).\n\nuse oc name for OPCODE, not op.","distinct":false,"url":"https://api.github.com/repos/perl11/cperl/commits/e37292217dc0cb6d66858f3673687bb2411c590d"},{"sha":"88a4dd447d53f77dd5f126577314e71818fefd83","author":{"email":"b3538261d0c0bffcce3d04dcc48be08a7393a14f@cpanel.net","name":"Reini Urban"},"message":"opcodes: prepare for UNBOXED NATIVE types\n\nreorder ops to group native types together.\nadd private BOXRET/NATIVE bits.\ntake SVf_NATIVE from SVf_PROTECT for now (WIP).\nadd missing implementations to pp_type.c\nrestore msgrcv and sockpair args.\nadd typed sassign ops.","distinct":false,"url":"https://api.github.com/repos/perl11/cperl/commits/88a4dd447d53f77dd5f126577314e71818fefd83"},{"sha":"88a2031424f45d718a2e4eb79701b8989ba47b50","author":{"email":"b3538261d0c0bffcce3d04dcc48be08a7393a14f@cpanel.net","name":"Reini Urban"},"message":"op.c: fix old OA_TARGLEX bug with TARGET_MY optim\n\nTried to track down a wrong TARGET_MY optimization on the\nucfirst op, where is illegal to use, because the\n(PL_opargs[kid->op_type] & OA_TARGLEX usage\nin maybe_targlex is wrong.\nThis was testing for one of both bits TARGET 8 **OR** TARGLEX 16\nthus always was true for each TARGET t op, like ucfirst, which\nare not prepared to use TARGET_MY.\nThe bug was there from Ilya's first SASSIGN optimization patch on, which\nadded TARGLEX, but this was using the bit 256 in opargs, which never\ncaused the bitpattern to match. And where it matched the assert was\nremoved. Ha!\n\nAdded now a bittester macro OP_HAS_TARGLEX, because people notoriously\nget bit matching with AND or OR wrong.","distinct":false,"url":"https://api.github.com/repos/perl11/cperl/commits/88a2031424f45d718a2e4eb79701b8989ba47b50"},{"sha":"9bdee21895272276ea4846d59462f2f8449ad8e2","author":{"email":"b3538261d0c0bffcce3d04dcc48be08a7393a14f@cpanel.net","name":"Reini Urban"},"message":"concat: enforce target allocation for concat\n\nesp. when doing fold_constants or compile-time concat\nwith empty op_targ.","distinct":false,"url":"https://api.github.com/repos/perl11/cperl/commits/9bdee21895272276ea4846d59462f2f8449ad8e2"},{"sha":"0726b6865e070941c400484a4caba6d9d19691cb","author":{"email":"b3538261d0c0bffcce3d04dcc48be08a7393a14f@cpanel.net","name":"Reini Urban"},"message":"opcodes: PL_op_type_str only with DEBUGGING\n\nit is not needed without and only wastes memory","distinct":false,"url":"https://api.github.com/repos/perl11/cperl/commits/0726b6865e070941c400484a4caba6d9d19691cb"},{"sha":"7b2395aa181b58b630762405d67fee817db497c6","author":{"email":"b3538261d0c0bffcce3d04dcc48be08a7393a14f@cpanel.net","name":"Reini Urban"},"message":"SVf_PROTECT: replace by explicit checks\n\nin Internals::SvREADONLY and  SvREADONLY_off().\nWe need the last remaining SV bit for something more important.\nCORE does not violate SvREADONLY_off for our protected values.\nWith extensions check explicitly.\n\nOne CHANGE:\nInternals::SvREADONLY( <protect value>, 0) croaks immediately,\nand not just when trying to assign a value later to it.\nThis is arguably the better behaviour to avoid magic errors at\na distance.","distinct":false,"url":"https://api.github.com/repos/perl11/cperl/commits/7b2395aa181b58b630762405d67fee817db497c6"},{"sha":"7eefbbde92e64bec3f4014725efd70a94a977c3f","author":{"email":"b3538261d0c0bffcce3d04dcc48be08a7393a14f@cpanel.net","name":"Reini Urban"},"message":"opcodes: fix 2 B tests, not so fragile\n\nDo not be too fragile in the B tests:\nTest for opnumber of null and stub, and not for chop.\n\nDo not check for the exact nullified opnumber in a Concise\ntest.","distinct":false,"url":"https://api.github.com/repos/perl11/cperl/commits/7eefbbde92e64bec3f4014725efd70a94a977c3f"},{"sha":"f3aa1fa3109ee3015a1c9cfb5287aa9f70d0689b","author":{"email":"b3538261d0c0bffcce3d04dcc48be08a7393a14f@cpanel.net","name":"Reini Urban"},"message":"opcodes: omit pure arg from null, opargs null == 0\n\nThis makes no sense here. null is technically pure but special.","distinct":false,"url":"https://api.github.com/repos/perl11/cperl/commits/f3aa1fa3109ee3015a1c9cfb5287aa9f70d0689b"}]}