1 ! Copyright (C) 2014 Jon Harper.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: accessors alien.c-types alien.data assocs classes.struct
4 combinators continuations destructors io io.backend
5 io.encodings.ascii io.encodings.string io.encodings.utf8
6 io.launcher kernel libc locals math.parser prettyprint sequences
7 yaml.ffi yaml.private ;
11 dup [ data>> ] [ type>> ] bi* {
12 { YAML_STREAM_START_EVENT [ stream_start>> ] }
13 { YAML_DOCUMENT_START_EVENT [ document_start>> ] }
14 { YAML_DOCUMENT_END_EVENT [ document_end>> ] }
15 { YAML_ALIAS_EVENT [ alias>> ] }
16 { YAML_SCALAR_EVENT [ scalar>> ] }
17 { YAML_SEQUENCE_START_EVENT [ sequence_start>> ] }
18 { YAML_MAPPING_START_EVENT [ mapping_start>> ] }
22 :: yaml-events ( string -- )
24 yaml_parser_t (malloc-struct) &free &yaml_parser_delete :> parser
25 parser yaml_parser_initialize .
27 string utf8 encode [ malloc-byte-array &free ] [ length ] bi :> ( input length )
28 parser input length yaml_parser_set_input_string
30 yaml_event_t (malloc-struct) &free :> event
35 parser event yaml_parser_parse [ [
36 event &yaml_event_delete event.
37 event type>> YAML_STREAM_END_EVENT = done!
38 ] with-destructors ] [
39 parser (libyaml-parser-error)
45 : factor-struct-sizes ( -- arr )
47 yaml_version_directive_t
50 stream_start_token_data
55 version_directive_token_data
57 stream_start_event_data
58 tag_directives_document_start_event_data
59 document_start_event_data
60 document_end_event_data
63 sequence_start_event_data
64 mapping_start_event_data
68 sequence_node_data_items
70 mapping_node_data_pairs
74 yaml_document_tag_directives
78 string_yaml_parser_input
80 yaml_parser_raw_buffer
83 yaml_parser_simple_keys
86 yaml_parser_tag_directives
89 yaml_emitter_output_string
91 yaml_emitter_raw_buffer
95 yaml_emitter_tag_directives
96 yaml_emitter_anchor_data
98 yaml_emitter_scalar_data
101 } [ heap-size ] map ;
103 : c-struct-sizes ( -- sizes )
104 "vocab:yaml/dbg/structs" normalize-path
105 ascii <process-reader> stream-lines
106 [ string>number ] map ;
108 : struct-sizes-dbg ( -- )
109 c-struct-sizes factor-struct-sizes
110 zip [ first2 = not ] find . . ;