struct scan_data_t: make some fields into an array
authorDavid Mitchell <davem@iabyn.com>
Thu, 29 Jun 2017 14:05:03 +0000 (15:05 +0100)
committerDavid Mitchell <davem@iabyn.com>
Sun, 2 Jul 2017 20:24:13 +0000 (21:24 +0100)
commit6ea771694bdcd55980c7932b2d2fa4aed8d66973
treed0833be230a802bfad0632c1826c665169babebc
parentb9a58d500dd75ba783abac92a56e57d41227f62b
struct scan_data_t: make some fields into an array

This private struct is used just within regcomp.c while compiling a
pattern. It has a set of fields for a fixed substring, and similar set for
floating, e.g.

    SV *longest_fixed;
    SV *longest_float;

    SSize_t *minlen_fixed;
    SSize_t *minlen_float;

    etc

Instead have a 2 element array, one for fixed, one for float, so e.g.

    data->offset_float_max

becomes

    data->substrs[1].max_offset

There are 3 reasons for doing this.

First, it makes the code more regular, and allows a whole substr ptr to be
passed as an arg to a function rather than having to pass every individual
field;

second, it makes the compile-time struct more similar to the runtime
struct, which already has such an arrangement;

third, it allows for a hypothetical future expansion where there aren't
necessarily at most 1 fixed and 1 floating substring.

Note that a side effect of this commit has been to change
lookbehind_fixed from I32 to SSize_t; lookbehind_float was already
SSize_t, so the I32 was probably a bug.
regcomp.c