tools.disassembler.udis: fix careless <c-object> usage

db4
Slava Pestov 2009-05-01 02:44:29 -05:00
parent ed21047b78
commit 85bd9209f9
2 changed files with 11 additions and 8 deletions

View File

@ -1,6 +1,4 @@
IN: tools.disassembler.tests IN: tools.disassembler.tests
USING: math classes.tuple prettyprint.custom USING: kernel fry vocabs tools.disassembler tools.test sequences ;
tools.disassembler tools.test strings ;
[ ] [ \ + disassemble ] unit-test "math" words [ [ [ ] ] dip '[ _ disassemble ] unit-test ] each
[ ] [ M\ string pprint* disassemble ] unit-test

View File

@ -3,7 +3,7 @@
USING: tools.disassembler namespaces combinators USING: tools.disassembler namespaces combinators
alien alien.syntax alien.c-types lexer parser kernel alien alien.syntax alien.c-types lexer parser kernel
sequences layouts math math.order alien.libraries sequences layouts math math.order alien.libraries
math.parser system make fry arrays ; math.parser system make fry arrays libc destructors ;
IN: tools.disassembler.udis IN: tools.disassembler.udis
<< <<
@ -47,11 +47,14 @@ FUNCTION: uint ud_insn_len ( ud* u ) ;
FUNCTION: char* ud_lookup_mnemonic ( int c ) ; FUNCTION: char* ud_lookup_mnemonic ( int c ) ;
: <ud> ( -- ud ) : <ud> ( -- ud )
"ud" <c-object> "ud" malloc-object &free
dup ud_init dup ud_init
dup cell-bits ud_set_mode dup cell-bits ud_set_mode
dup UD_SYN_INTEL ud_set_syntax ; dup UD_SYN_INTEL ud_set_syntax ;
: with-ud ( quot: ( ud -- ) -- )
[ [ <ud> ] dip call ] with-destructors ; inline
SINGLETON: udis-disassembler SINGLETON: udis-disassembler
: buf/len ( from to -- buf len ) [ drop <alien> ] [ swap - ] 2bi ; : buf/len ( from to -- buf len ) [ drop <alien> ] [ swap - ] 2bi ;
@ -82,10 +85,12 @@ SINGLETON: udis-disassembler
] { } make ; ] { } make ;
M: udis-disassembler disassemble* ( from to -- buffer ) M: udis-disassembler disassemble* ( from to -- buffer )
[ <ud> ] 2dip { '[
_ _
[ drop ud_set_pc ] [ drop ud_set_pc ]
[ buf/len ud_set_input_buffer ] [ buf/len ud_set_input_buffer ]
[ 2drop (disassemble) format-disassembly ] [ 2drop (disassemble) format-disassembly ]
} 3cleave ; 3tri
] with-ud ;
udis-disassembler disassembler-backend set-global udis-disassembler disassembler-backend set-global