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'

