4

私は bleadperl の新しい parse_block 機能で遊んでいます。

いくつかのステートメントを解析して listop にすることができます。これにより、以下のツリーが生成されます。

LISTOP (0x1002a00c0) leave [1] 
    OP (0x1002d6220) enter 
    COP (0x1002a0b80) nextstate 
    OP (0x10028c0f0) null 
    LISTOP (0x1002a0170) print 
        OP (0x1002b1a90) pushmark 
        SVOP (0x100327ee0) const  PV (0x100826ec0) "hello\n" 
    COP (0x1002a0c50) nextstate 
    LISTOP (0x100324ee0) print 
        OP (0x100327880) pushmark 
        SVOP (0x100324eb0) const  PV (0x100897688) "world\n"

キーワード プラグインから optree 構造へのポインタを返す必要があります。現時点では、ops のベア リストのみが含まれています。これらの操作をサブルーチン内にラップし、スタッシュ内のシンボルに割り当てたいと考えています。

だから私はこのようなことをしたいと思います:

$ perl  -MO=Terse -e "*foo = sub { print 'my listops here' }"

LISTOP (0x10022b5e0) leave [1] 
    OP (0x10022b620) enter 
    COP (0x10022b590) nextstate 
    BINOP (0x100202090) sassign 
        UNOP (0x1002083d0) refgen 
            UNOP (0x100208360) null [146] 
                OP (0x1002083a0) pushmark 
                SVOP (0x100208330) anoncode [1] CV (0x100826d40) 
        UNOP (0x1002085a0) rv2gv 
            SVOP (0x100208550) gv  GV (0x100826d28) *foo 

おそらく、listops の最初と最後に entersub、leavesub を追加する必要がありますが、XS でこれをどのように構築するのかわかりません。また、結果の optree を CV に変換する方法もわかりませんか?

xsub の CV を生成する例を見つけることができますが、optree からはできません。

ご協力いただきありがとうございます。

4

1 に答える 1