add a partial eval for memory>struct so that it compiles efficiently when the struct class is known
parent
5376263984
commit
4b56fa8009
|
@ -5,7 +5,8 @@ classes.tuple classes.tuple.parser classes.tuple.private
|
||||||
combinators combinators.short-circuit combinators.smart fry
|
combinators combinators.short-circuit combinators.smart fry
|
||||||
generalizations generic.parser kernel kernel.private lexer
|
generalizations generic.parser kernel kernel.private lexer
|
||||||
libc macros make math math.order parser quotations sequences
|
libc macros make math math.order parser quotations sequences
|
||||||
slots slots.private struct-arrays vectors words ;
|
slots slots.private struct-arrays vectors words
|
||||||
|
compiler.tree.propagation.transforms ;
|
||||||
FROM: slots => reader-word writer-word ;
|
FROM: slots => reader-word writer-word ;
|
||||||
IN: classes.struct
|
IN: classes.struct
|
||||||
|
|
||||||
|
@ -18,7 +19,7 @@ TUPLE: struct-slot-spec < slot-spec
|
||||||
c-type ;
|
c-type ;
|
||||||
|
|
||||||
PREDICATE: struct-class < tuple-class
|
PREDICATE: struct-class < tuple-class
|
||||||
\ struct subclass-of? ;
|
{ [ \ struct subclass-of? ] [ all-slots length 1 = ] } 1&& ;
|
||||||
|
|
||||||
: struct-slots ( struct -- slots )
|
: struct-slots ( struct -- slots )
|
||||||
"struct-slots" word-prop ;
|
"struct-slots" word-prop ;
|
||||||
|
@ -35,8 +36,11 @@ M: struct equal?
|
||||||
} 2&& ;
|
} 2&& ;
|
||||||
|
|
||||||
: memory>struct ( ptr class -- struct )
|
: memory>struct ( ptr class -- struct )
|
||||||
over c-ptr? [ swap \ c-ptr bad-slot-value ] unless
|
[ 1array ] dip slots>tuple ;
|
||||||
tuple-layout <tuple> [ 2 set-slot ] keep ; inline
|
|
||||||
|
\ memory>struct [
|
||||||
|
dup struct-class? [ '[ _ boa ] ] [ drop f ] if
|
||||||
|
] 1 define-partial-eval
|
||||||
|
|
||||||
: malloc-struct ( class -- struct )
|
: malloc-struct ( class -- struct )
|
||||||
[ heap-size malloc ] keep memory>struct ; inline
|
[ heap-size malloc ] keep memory>struct ; inline
|
||||||
|
|
Loading…
Reference in New Issue