TODO:

* > 3. In several cases, "perl ppport.h --copy=.new" output a new file in
  > which the only change was the addition of "#include "ppport.h"". In each
  > case, that actually wasn't necessary because the source file in question
  > already #included another source file which #included ppport.h itself.
  > Would it be possible for the analyzer to follow #include directives to
  > spot cases like this?

  Uh, well, I guess it would be possible. But I have some concerns:

  1. ppport.h is already too big. :-)

  2. There is code in ppport.h to actually remove an

       #include "ppport.h"

     if it appears not to be needed. If it's not needed in your
     included file, it might be dropped from there and moved to
     the other file that included the first one. This would make
     the logic much more complicated.

  3. As ppport.h is configurable, it's not (always) a good idea
     to put it into a file that's included from another file.

  I guess I'll have to think about this a little more. Maybe I can
  come up with a fancy solution that doesn't increase the code size
  too much.


* On 14/12/06, Nicholas Clark <nick@ccl4.org> wrote:
  > On Thu, Dec 14, 2006 at 05:03:24AM +0100, Andreas J. Koenig wrote:
  >
  > > Params::Validate and Clone suffer from the same cold:
  >
  > The same patch will make both compile and pass tests.
  > I'm wondering if it might be better to totally drop SVt_PBVM and let source
  > code fail to compile.

  I don't think so. Because :
  1. your redefinition of SVt_PBVM is probably what most XS modules want
  2. anyway, if we remove it from the core, it might appear in Devel::PPPort :)


* maybe backport bytes_from_utf8() for 5.6.0 (or even before)?

* check which of the following we need to support:

    amagic_generation
    AMG_names
    an
    Argv
    argvgv
    argvoutgv
    basetime
    beginav
    block_type
    bodytarget
    bufend
    bufptr
    check
    chopset
    Cmd
    compcv
    compiling
    comppad
    comppad_name
    comppad_name_fill
    copline
    cop_seqmax
    cryptseen
    cshlen
    cshname
    curcop
    curinterp
    curpad
    curpm
    curstash
    curstname
    dbargs
    DBgv
    DBline
    DBsignal
    DBsingle
    DBsub
    DBtrace
    debstash
    debug
    defgv
    defoutgv
    defstash
    delaymagic
    diehook
    dirty
    doextract
    doswitches
    do_undump
    dowarn
    egid
    encoding
    endav
    envgv
    errgv
    error_count
    errors
    euid
    eval_root
    evalseq
    eval_start
    expect
    fdpid
    filemode
    firstgv
    fold
    forkprocess
    formfeed
    formtarget
    freq
    generation
    gensym
    gid
    hexdigit
    hints
    incgv
    in_eval
    in_my
    inplace
    lastfd
    last_in_gv
    last_lop
    last_lop_op
    lastscream
    laststatval
    laststype
    last_uni
    lex_brackets
    lex_brackstack
    lex_casemods
    lex_casestack
    lex_defer
    lex_dojoin
    lex_expect
    lex_formbrack
    lex_inpat
    lex_inwhat
    lex_op
    lex_repl
    lex_starts
    lex_state
    lex_stuff
    lineary
    linestr
    localizing
    main_cv
    main_root
    mainstack
    main_start
    markstack
    markstack_max
    markstack_ptr
    max_intro_pending
    maxo
    maxscream
    maxsysfd
    min_intro_pending
    minus_a
    minus_c
    minus_F
    minus_l
    minus_n
    minus_p
    multi_close
    multi_end
    multi_open
    multi_start
    na
    nexttoke
    nexttype
    nextval
    nice_chunk
    nice_chunk_size
    No
    no_aelem
    no_dir_func
    no_func
    no_mem
    nomemok
    no_modify
    no_myglob
    no_security
    no_sock_func
    no_symref
    no_usym
    no_wrongref
    nrs
    oldbufptr
    oldname
    oldoldbufptr
    op
    opargs
    op_desc
    op_mask
    op_name
    op_seq
    origalen
    origargc
    origargv
    origenviron
    origfilename
    osname
    padix
    padix_floor
    pad_reset_pending
    patchlevel
    patleave
    perldb
    perl_destruct_level
    pidstatus
    ppaddr
    preambleav
    preambled
    preprocess
    profiledata
    regdummy
    regendp
    regeol
    reginput
    regkind
    reglastparen
    regsize
    regstartp
    restartop
    rs
    rsfp
    rsfp_filters
    runops
    savestack
    savestack_ix
    savestack_max
    sawampersand
    scopestack
    scopestack_ix
    scopestack_max
    screamfirst
    screamnext
    secondgv
    signals
    sig_name
    sig_num
    simple
    sortcop
    sortstash
    splitstr
    stack_base
    stack_max
    stack_sp
    statbuf
    statcache
    statgv
    statname
    statusvalue
    stdingv
    sub_generation
    subline
    subname
    Sv
    sv_arenaroot
    sv_count
    sv_no
    sv_objcount
    sv_root
    sv_undef
    sv_yes
    tainted
    tainting
    timesbuf
    tmps_floor
    tmps_ix
    tmps_max
    tmps_stack
    tokenbuf
    top_env
    toptarget
    uid
    unsafe
    varies
    vtbl_amagic
    vtbl_amagicelem
    vtbl_arylen
    vtbl_bm
    vtbl_dbline
    vtbl_env
    vtbl_envelem
    vtbl_glob
    vtbl_isa
    vtbl_isaelem
    vtbl_mglob
    vtbl_pack
    vtbl_packelem
    vtbl_pos
    vtbl_sig
    vtbl_sigelem
    vtbl_substr
    vtbl_sv
    vtbl_taint
    vtbl_uvar
    vtbl_vec
    warnhook
    warn_nl
    warn_nosemi
    warn_reserved
    warn_uninit
    watchaddr
    watchok
    Xpv
    Yes

* have an --env option for soak to set env variable combinations

* only overwrite generated files if they actually changed

* try to make parts/apicheck.pl automatically find NEED_ #defines

* add support for my_vsnprintf?

* try to perform some core consistency checks:

  - check if 'd' flag in embed.fnc matches with
    supplied documentation

  - check if all public API is documented

* check (during make regen?) if MAX_PERL in PPPort_pm.PL
  needs to be updated

* see if we can implement sv_catpvf() for < 5.004

* MULTICALL ?

* improve apicheck (things like utf8_mg_pos_init() are
  not currently checked)

* more documentation, more tests

* Resolve dependencies in Makefile.PL and remind of
  running 'make regen'
