2 * Copyright 2011 Leiden University. All rights reserved.
3 * Copyright 2013-2014 Ecole Normale Superieure. All rights reserved.
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
9 * 1. Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
12 * 2. Redistributions in binary form must reproduce the above
13 * copyright notice, this list of conditions and the following
14 * disclaimer in the documentation and/or other materials provided
15 * with the distribution.
17 * THIS SOFTWARE IS PROVIDED BY LEIDEN UNIVERSITY ''AS IS'' AND ANY
18 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
20 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL LEIDEN UNIVERSITY OR
21 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
22 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
23 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
24 * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
27 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 * The views and conclusions contained in the software and documentation
30 * are those of the authors and should not be interpreted as
31 * representing official policies, either expressed or implied, of
40 #include "scop_yaml.h"
43 static int emit_string(yaml_emitter_t
*emitter
, const char *str
)
47 if (!yaml_scalar_event_initialize(&event
, NULL
, NULL
,
48 (yaml_char_t
*) str
, strlen(str
),
49 1, 1, YAML_PLAIN_SCALAR_STYLE
))
51 if (!yaml_emitter_emit(emitter
, &event
))
57 /* Print the string "name" and the string "str" to "emitter".
59 static int emit_named_string(yaml_emitter_t
*emitter
, const char *name
,
62 if (emit_string(emitter
, name
) < 0)
64 if (emit_string(emitter
, str
) < 0)
69 /* Print the isl_id "id" to "emitter".
71 static int emit_id(yaml_emitter_t
*emitter
, __isl_keep isl_id
*id
)
73 return emit_string(emitter
, isl_id_get_name(id
));
76 /* Print the string "name" and the isl_id "id" to "emitter".
78 static int emit_named_id(yaml_emitter_t
*emitter
, const char *name
,
79 __isl_keep isl_id
*id
)
81 if (emit_string(emitter
, name
) < 0)
83 if (emit_id(emitter
, id
) < 0)
88 static int emit_int(yaml_emitter_t
*emitter
, int i
)
92 snprintf(buffer
, sizeof(buffer
), "%d", i
);
93 return emit_string(emitter
, buffer
);
96 static int emit_named_int(yaml_emitter_t
*emitter
, const char *name
, int i
)
98 if (emit_string(emitter
, name
) < 0)
100 if (emit_int(emitter
, i
) < 0)
105 /* Print the unsigned integer "u" to "emitter".
107 static int emit_unsigned(yaml_emitter_t
*emitter
, unsigned u
)
111 snprintf(buffer
, sizeof(buffer
), "%u", u
);
112 return emit_string(emitter
, buffer
);
115 /* Print the string "name" and the unsigned integer "u" to "emitter".
117 static int emit_named_unsigned(yaml_emitter_t
*emitter
, const char *name
,
120 if (emit_string(emitter
, name
) < 0)
122 if (emit_int(emitter
, u
) < 0)
127 static int emit_double(yaml_emitter_t
*emitter
, double d
)
131 snprintf(buffer
, sizeof(buffer
), "%g", d
);
132 return emit_string(emitter
, buffer
);
135 static int emit_map(yaml_emitter_t
*emitter
, __isl_keep isl_map
*map
)
137 isl_ctx
*ctx
= isl_map_get_ctx(map
);
142 p
= isl_printer_to_str(ctx
);
143 p
= isl_printer_print_map(p
, map
);
144 str
= isl_printer_get_str(p
);
146 r
= emit_string(emitter
, str
);
151 /* Print the isl_val "val" to "emitter".
153 static int emit_val(yaml_emitter_t
*emitter
, __isl_keep isl_val
*val
)
155 isl_ctx
*ctx
= isl_val_get_ctx(val
);
160 p
= isl_printer_to_str(ctx
);
161 p
= isl_printer_print_val(p
, val
);
162 str
= isl_printer_get_str(p
);
164 r
= emit_string(emitter
, str
);
169 /* Print the string "name" and the isl_val "val" to "emitter".
171 static int emit_named_val(yaml_emitter_t
*emitter
, const char *name
,
172 __isl_keep isl_val
*val
)
174 if (emit_string(emitter
, name
) < 0)
176 if (emit_val(emitter
, val
) < 0)
181 static int emit_set(yaml_emitter_t
*emitter
, __isl_keep isl_set
*set
)
183 isl_ctx
*ctx
= isl_set_get_ctx(set
);
188 p
= isl_printer_to_str(ctx
);
189 p
= isl_printer_print_set(p
, set
);
190 str
= isl_printer_get_str(p
);
192 r
= emit_string(emitter
, str
);
197 static int emit_named_set(yaml_emitter_t
*emitter
, const char *name
,
198 __isl_keep isl_set
*set
)
200 if (emit_string(emitter
, name
) < 0)
202 if (emit_set(emitter
, set
) < 0)
207 /* Print the string "name" and the map "map" to "emitter".
209 static int emit_named_map(yaml_emitter_t
*emitter
, const char *name
,
210 __isl_keep isl_map
*map
)
212 if (emit_string(emitter
, name
) < 0)
214 if (emit_map(emitter
, map
) < 0)
219 /* Print the union set "uset" to "emitter".
221 static int emit_union_set(yaml_emitter_t
*emitter
,
222 __isl_keep isl_union_set
*uset
)
224 isl_ctx
*ctx
= isl_union_set_get_ctx(uset
);
229 p
= isl_printer_to_str(ctx
);
230 p
= isl_printer_print_union_set(p
, uset
);
231 str
= isl_printer_get_str(p
);
233 r
= emit_string(emitter
, str
);
238 /* Print the union map "umap" to "emitter".
240 static int emit_union_map(yaml_emitter_t
*emitter
,
241 __isl_keep isl_union_map
*umap
)
243 isl_ctx
*ctx
= isl_union_map_get_ctx(umap
);
248 p
= isl_printer_to_str(ctx
);
249 p
= isl_printer_print_union_map(p
, umap
);
250 str
= isl_printer_get_str(p
);
252 r
= emit_string(emitter
, str
);
257 /* Print the string "name" and the union set "uset" to "emitter".
259 static int emit_named_union_set(yaml_emitter_t
*emitter
, const char *name
,
260 __isl_keep isl_union_set
*uset
)
262 if (emit_string(emitter
, name
) < 0)
264 if (emit_union_set(emitter
, uset
) < 0)
269 /* Print the string "name" and the union map "umap" to "emitter".
271 static int emit_named_union_map(yaml_emitter_t
*emitter
, const char *name
,
272 __isl_keep isl_union_map
*umap
)
274 if (emit_string(emitter
, name
) < 0)
276 if (emit_union_map(emitter
, umap
) < 0)
281 /* Print the isl_multi_pw_aff "mpa" to "emitter".
283 static int emit_multi_pw_aff(yaml_emitter_t
*emitter
,
284 __isl_keep isl_multi_pw_aff
*mpa
)
286 isl_ctx
*ctx
= isl_multi_pw_aff_get_ctx(mpa
);
291 p
= isl_printer_to_str(ctx
);
292 p
= isl_printer_print_multi_pw_aff(p
, mpa
);
293 str
= isl_printer_get_str(p
);
295 r
= emit_string(emitter
, str
);
300 /* Print the string "name" and the isl_multi_pw_aff "mpa" to "emitter".
302 static int emit_named_multi_pw_aff(yaml_emitter_t
*emitter
, const char *name
,
303 __isl_keep isl_multi_pw_aff
*mpa
)
305 if (emit_string(emitter
, name
) < 0)
307 if (emit_multi_pw_aff(emitter
, mpa
) < 0)
312 /* Print "type" to "emitter".
314 static int emit_type(yaml_emitter_t
*emitter
, struct pet_type
*type
)
318 if (!yaml_mapping_start_event_initialize(&event
, NULL
, NULL
, 1,
319 YAML_BLOCK_MAPPING_STYLE
))
321 if (!yaml_emitter_emit(emitter
, &event
))
324 if (emit_string(emitter
, "name") < 0)
326 if (emit_string(emitter
, type
->name
) < 0)
329 if (emit_string(emitter
, "definition") < 0)
331 if (emit_string(emitter
, type
->definition
) < 0)
334 if (!yaml_mapping_end_event_initialize(&event
))
336 if (!yaml_emitter_emit(emitter
, &event
))
342 /* Print the list of "n_type" "types", if any, to "emitter".
344 static int emit_types(yaml_emitter_t
*emitter
, int n_type
,
345 struct pet_type
**types
)
353 if (emit_string(emitter
, "types") < 0)
355 if (!yaml_sequence_start_event_initialize(&event
, NULL
, NULL
, 1,
356 YAML_BLOCK_SEQUENCE_STYLE
))
358 if (!yaml_emitter_emit(emitter
, &event
))
361 for (i
= 0; i
< n_type
; ++i
)
362 if (emit_type(emitter
, types
[i
]) < 0)
365 if (!yaml_sequence_end_event_initialize(&event
))
367 if (!yaml_emitter_emit(emitter
, &event
))
373 static int emit_array(yaml_emitter_t
*emitter
, struct pet_array
*array
)
377 if (!yaml_mapping_start_event_initialize(&event
, NULL
, NULL
, 1,
378 YAML_BLOCK_MAPPING_STYLE
))
380 if (!yaml_emitter_emit(emitter
, &event
))
383 if (emit_string(emitter
, "context") < 0)
385 if (emit_set(emitter
, array
->context
) < 0)
388 if (emit_string(emitter
, "extent") < 0)
390 if (emit_set(emitter
, array
->extent
) < 0)
393 if (array
->value_bounds
) {
394 if (emit_string(emitter
, "value_bounds") < 0)
396 if (emit_set(emitter
, array
->value_bounds
) < 0)
400 if (emit_string(emitter
, "element_type") < 0)
402 if (emit_string(emitter
, array
->element_type
) < 0)
404 if (emit_named_int(emitter
, "element_size", array
->element_size
) < 0)
407 if (array
->element_is_record
)
408 if (emit_named_int(emitter
, "element_is_record",
409 array
->element_is_record
) < 0)
412 if (array
->live_out
) {
413 if (emit_string(emitter
, "live_out") < 0)
415 if (emit_string(emitter
, "1") < 0)
419 if (array
->uniquely_defined
) {
420 if (emit_string(emitter
, "uniquely_defined") < 0)
422 if (emit_string(emitter
, "1") < 0)
426 if (array
->declared
&& emit_named_int(emitter
, "declared", 1) < 0)
428 if (array
->exposed
&& emit_named_int(emitter
, "exposed", 1) < 0)
431 if (!yaml_mapping_end_event_initialize(&event
))
433 if (!yaml_emitter_emit(emitter
, &event
))
439 static int emit_arrays(yaml_emitter_t
*emitter
, int n_array
,
440 struct pet_array
**arrays
)
445 if (emit_string(emitter
, "arrays") < 0)
447 if (!yaml_sequence_start_event_initialize(&event
, NULL
, NULL
, 1,
448 YAML_BLOCK_SEQUENCE_STYLE
))
450 if (!yaml_emitter_emit(emitter
, &event
))
453 for (i
= 0; i
< n_array
; ++i
)
454 if (emit_array(emitter
, arrays
[i
]) < 0)
457 if (!yaml_sequence_end_event_initialize(&event
))
459 if (!yaml_emitter_emit(emitter
, &event
))
465 static int emit_expr_type(yaml_emitter_t
*emitter
, enum pet_expr_type type
)
467 if (emit_string(emitter
, pet_type_str(type
)) < 0)
472 static int emit_expr(yaml_emitter_t
*emitter
, __isl_keep pet_expr
*expr
)
476 if (!yaml_mapping_start_event_initialize(&event
, NULL
, NULL
, 1,
477 YAML_BLOCK_MAPPING_STYLE
))
479 if (!yaml_emitter_emit(emitter
, &event
))
482 if (emit_string(emitter
, "type") < 0)
484 if (emit_expr_type(emitter
, expr
->type
) < 0)
487 switch (expr
->type
) {
491 if (emit_named_val(emitter
, "value", expr
->i
) < 0)
494 case pet_expr_double
:
495 if (emit_string(emitter
, "value") < 0)
497 if (emit_double(emitter
, expr
->d
.val
) < 0)
499 if (emit_string(emitter
, "string") < 0)
501 if (emit_string(emitter
, expr
->d
.s
) < 0)
504 case pet_expr_access
:
505 if (emit_string(emitter
, "relation") < 0)
507 if (emit_map(emitter
, expr
->acc
.access
) < 0)
509 if (emit_named_multi_pw_aff(emitter
,
510 "index", expr
->acc
.index
) < 0)
512 if (expr
->acc
.ref_id
&&
513 emit_named_id(emitter
, "reference", expr
->acc
.ref_id
) < 0)
515 if (emit_string(emitter
, "read") < 0)
517 if (emit_int(emitter
, expr
->acc
.read
) < 0)
519 if (emit_string(emitter
, "write") < 0)
521 if (emit_int(emitter
, expr
->acc
.write
) < 0)
525 if (emit_string(emitter
, "operation") < 0)
527 if (emit_string(emitter
, pet_op_str(expr
->op
)) < 0)
531 if (emit_string(emitter
, "name") < 0)
533 if (emit_string(emitter
, expr
->name
) < 0)
537 if (emit_string(emitter
, "type_name") < 0)
539 if (emit_string(emitter
, expr
->type_name
) < 0)
544 if (expr
->n_arg
> 0) {
547 if (emit_string(emitter
, "arguments") < 0)
549 if (!yaml_sequence_start_event_initialize(&event
, NULL
, NULL
, 1,
550 YAML_BLOCK_SEQUENCE_STYLE
))
552 if (!yaml_emitter_emit(emitter
, &event
))
555 for (i
= 0; i
< expr
->n_arg
; ++i
)
556 if (emit_expr(emitter
, expr
->args
[i
]) < 0)
559 if (!yaml_sequence_end_event_initialize(&event
))
561 if (!yaml_emitter_emit(emitter
, &event
))
565 if (!yaml_mapping_end_event_initialize(&event
))
567 if (!yaml_emitter_emit(emitter
, &event
))
573 /* Print the string "name" and the expression "expr" to "emitter".
575 static int emit_named_expr(yaml_emitter_t
*emitter
, const char *name
,
576 __isl_keep pet_expr
*expr
)
578 if (emit_string(emitter
, name
) < 0)
580 if (emit_expr(emitter
, expr
) < 0)
585 /* Print "type" to "emitter".
587 static int emit_tree_type(yaml_emitter_t
*emitter
, enum pet_tree_type type
)
589 if (emit_string(emitter
, pet_tree_type_str(type
)) < 0)
594 /* Recursively print "tree" to "emitter".
596 static int emit_tree(yaml_emitter_t
*emitter
, __isl_keep pet_tree
*tree
)
601 if (!yaml_mapping_start_event_initialize(&event
, NULL
, NULL
, 1,
602 YAML_BLOCK_MAPPING_STYLE
))
604 if (!yaml_emitter_emit(emitter
, &event
))
607 if (emit_string(emitter
, "type") < 0)
609 if (emit_tree_type(emitter
, tree
->type
) < 0)
612 switch (tree
->type
) {
616 if (emit_named_int(emitter
, "block", tree
->u
.b
.block
) < 0)
618 if (tree
->u
.b
.n
== 0)
621 if (emit_string(emitter
, "children") < 0)
623 if (!yaml_sequence_start_event_initialize(&event
, NULL
, NULL
, 1,
624 YAML_BLOCK_SEQUENCE_STYLE
))
626 if (!yaml_emitter_emit(emitter
, &event
))
629 for (i
= 0; i
< tree
->u
.b
.n
; ++i
)
630 if (emit_tree(emitter
, tree
->u
.b
.child
[i
]) < 0)
633 if (!yaml_sequence_end_event_initialize(&event
))
635 if (!yaml_emitter_emit(emitter
, &event
))
639 case pet_tree_continue
:
642 if (emit_named_expr(emitter
, "variable", tree
->u
.d
.var
) < 0)
645 case pet_tree_decl_init
:
646 if (emit_named_expr(emitter
, "variable", tree
->u
.d
.var
) < 0)
648 if (emit_named_expr(emitter
,
649 "initialization", tree
->u
.d
.init
) < 0)
653 if (emit_named_expr(emitter
, "expr", tree
->u
.e
.expr
) < 0)
657 if (tree
->u
.l
.independent
)
658 if (emit_named_int(emitter
, "independent", 1) < 0)
660 if (emit_named_int(emitter
, "declared", tree
->u
.l
.declared
) < 0)
662 if (emit_named_expr(emitter
, "variable", tree
->u
.l
.iv
) < 0)
664 if (emit_named_expr(emitter
,
665 "initialization", tree
->u
.l
.init
) < 0)
667 if (emit_named_expr(emitter
, "condition", tree
->u
.l
.cond
) < 0)
669 if (emit_named_expr(emitter
, "increment", tree
->u
.l
.inc
) < 0)
671 if (emit_string(emitter
, "body") < 0)
673 if (emit_tree(emitter
, tree
->u
.l
.body
) < 0)
677 if (emit_named_expr(emitter
, "condition", tree
->u
.l
.cond
) < 0)
679 if (emit_string(emitter
, "body") < 0)
681 if (emit_tree(emitter
, tree
->u
.l
.body
) < 0)
684 case pet_tree_infinite_loop
:
685 if (emit_string(emitter
, "body") < 0)
687 if (emit_tree(emitter
, tree
->u
.l
.body
) < 0)
691 if (emit_named_expr(emitter
, "condition", tree
->u
.i
.cond
) < 0)
693 if (emit_string(emitter
, "then") < 0)
695 if (emit_tree(emitter
, tree
->u
.i
.then_body
) < 0)
698 case pet_tree_if_else
:
699 if (emit_named_expr(emitter
, "condition", tree
->u
.i
.cond
) < 0)
701 if (emit_string(emitter
, "then") < 0)
703 if (emit_tree(emitter
, tree
->u
.i
.then_body
) < 0)
705 if (emit_string(emitter
, "else") < 0)
707 if (emit_tree(emitter
, tree
->u
.i
.else_body
) < 0)
712 if (!yaml_mapping_end_event_initialize(&event
))
714 if (!yaml_emitter_emit(emitter
, &event
))
720 static int emit_stmt(yaml_emitter_t
*emitter
, struct pet_stmt
*stmt
)
724 if (!yaml_mapping_start_event_initialize(&event
, NULL
, NULL
, 1,
725 YAML_BLOCK_MAPPING_STYLE
))
727 if (!yaml_emitter_emit(emitter
, &event
))
730 if (emit_string(emitter
, "line") < 0)
732 if (emit_int(emitter
, pet_loc_get_line(stmt
->loc
)) < 0)
735 if (emit_string(emitter
, "domain") < 0)
737 if (emit_set(emitter
, stmt
->domain
) < 0)
740 if (emit_string(emitter
, "schedule") < 0)
742 if (emit_map(emitter
, stmt
->schedule
) < 0)
745 if (emit_string(emitter
, "body") < 0)
747 if (emit_tree(emitter
, stmt
->body
) < 0)
750 if (stmt
->n_arg
> 0) {
753 if (emit_string(emitter
, "arguments") < 0)
755 if (!yaml_sequence_start_event_initialize(&event
, NULL
, NULL
, 1,
756 YAML_BLOCK_SEQUENCE_STYLE
))
758 if (!yaml_emitter_emit(emitter
, &event
))
761 for (i
= 0; i
< stmt
->n_arg
; ++i
)
762 if (emit_expr(emitter
, stmt
->args
[i
]) < 0)
765 if (!yaml_sequence_end_event_initialize(&event
))
767 if (!yaml_emitter_emit(emitter
, &event
))
771 if (!yaml_mapping_end_event_initialize(&event
))
773 if (!yaml_emitter_emit(emitter
, &event
))
779 static int emit_statements(yaml_emitter_t
*emitter
, int n_stmt
,
780 struct pet_stmt
**stmts
)
785 if (emit_string(emitter
, "statements") < 0)
787 if (!yaml_sequence_start_event_initialize(&event
, NULL
, NULL
, 1,
788 YAML_BLOCK_SEQUENCE_STYLE
))
790 if (!yaml_emitter_emit(emitter
, &event
))
793 for (i
= 0; i
< n_stmt
; ++i
)
794 if (emit_stmt(emitter
, stmts
[i
]) < 0)
797 if (!yaml_sequence_end_event_initialize(&event
))
799 if (!yaml_emitter_emit(emitter
, &event
))
805 /* Print "implication" to "emitter".
807 static int emit_implication(yaml_emitter_t
*emitter
,
808 struct pet_implication
*implication
)
812 if (!yaml_mapping_start_event_initialize(&event
, NULL
, NULL
, 1,
813 YAML_BLOCK_MAPPING_STYLE
))
815 if (!yaml_emitter_emit(emitter
, &event
))
818 if (emit_named_int(emitter
, "satisfied", implication
->satisfied
) < 0)
821 if (emit_named_map(emitter
, "extension", implication
->extension
) < 0)
824 if (!yaml_mapping_end_event_initialize(&event
))
826 if (!yaml_emitter_emit(emitter
, &event
))
832 /* Print the list of "n_implication" "implications", if any, to "emitter".
834 static int emit_implications(yaml_emitter_t
*emitter
, int n_implication
,
835 struct pet_implication
**implications
)
840 if (n_implication
== 0)
843 if (emit_string(emitter
, "implications") < 0)
845 if (!yaml_sequence_start_event_initialize(&event
, NULL
, NULL
, 1,
846 YAML_BLOCK_SEQUENCE_STYLE
))
848 if (!yaml_emitter_emit(emitter
, &event
))
851 for (i
= 0; i
< n_implication
; ++i
)
852 if (emit_implication(emitter
, implications
[i
]) < 0)
855 if (!yaml_sequence_end_event_initialize(&event
))
857 if (!yaml_emitter_emit(emitter
, &event
))
863 /* Print "independence" to "emitter".
865 static int emit_independence(yaml_emitter_t
*emitter
,
866 struct pet_independence
*independence
)
870 if (!yaml_mapping_start_event_initialize(&event
, NULL
, NULL
, 1,
871 YAML_BLOCK_MAPPING_STYLE
))
873 if (!yaml_emitter_emit(emitter
, &event
))
876 if (emit_named_union_map(emitter
, "filter", independence
->filter
) < 0)
879 if (emit_named_union_set(emitter
, "local", independence
->local
) < 0)
882 if (!yaml_mapping_end_event_initialize(&event
))
884 if (!yaml_emitter_emit(emitter
, &event
))
890 /* Print the list of "n_independence" "independences", if any, to "emitter".
892 static int emit_independences(yaml_emitter_t
*emitter
, int n_independence
,
893 struct pet_independence
**independences
)
898 if (n_independence
== 0)
901 if (emit_string(emitter
, "independences") < 0)
903 if (!yaml_sequence_start_event_initialize(&event
, NULL
, NULL
, 1,
904 YAML_BLOCK_SEQUENCE_STYLE
))
906 if (!yaml_emitter_emit(emitter
, &event
))
909 for (i
= 0; i
< n_independence
; ++i
)
910 if (emit_independence(emitter
, independences
[i
]) < 0)
913 if (!yaml_sequence_end_event_initialize(&event
))
915 if (!yaml_emitter_emit(emitter
, &event
))
921 static int emit_scop(yaml_emitter_t
*emitter
, struct pet_scop
*scop
)
925 if (!yaml_mapping_start_event_initialize(&event
, NULL
, NULL
, 1,
926 YAML_BLOCK_MAPPING_STYLE
))
928 if (!yaml_emitter_emit(emitter
, &event
))
931 if (emit_named_unsigned(emitter
,
932 "start", pet_loc_get_start(scop
->loc
)) < 0)
934 if (emit_named_unsigned(emitter
, "end", pet_loc_get_end(scop
->loc
)) < 0)
936 if (emit_named_string(emitter
,
937 "indent", pet_loc_get_indent(scop
->loc
)) < 0)
939 if (emit_string(emitter
, "context") < 0)
941 if (emit_set(emitter
, scop
->context
) < 0)
943 if (!isl_set_plain_is_universe(scop
->context_value
) &&
944 emit_named_set(emitter
, "context_value", scop
->context_value
) < 0)
947 if (emit_types(emitter
, scop
->n_type
, scop
->types
) < 0)
949 if (emit_arrays(emitter
, scop
->n_array
, scop
->arrays
) < 0)
952 if (emit_statements(emitter
, scop
->n_stmt
, scop
->stmts
) < 0)
955 if (emit_implications(emitter
, scop
->n_implication
,
956 scop
->implications
) < 0)
959 if (emit_independences(emitter
, scop
->n_independence
,
960 scop
->independences
) < 0)
963 if (!yaml_mapping_end_event_initialize(&event
))
965 if (!yaml_emitter_emit(emitter
, &event
))
971 /* Print a YAML serialization of "scop" to "out".
973 int pet_scop_emit(FILE *out
, struct pet_scop
*scop
)
975 yaml_emitter_t emitter
;
978 yaml_emitter_initialize(&emitter
);
980 yaml_emitter_set_output_file(&emitter
, out
);
982 yaml_stream_start_event_initialize(&event
, YAML_UTF8_ENCODING
);
983 if (!yaml_emitter_emit(&emitter
, &event
))
986 if (!yaml_document_start_event_initialize(&event
, NULL
, NULL
, NULL
, 1))
988 if (!yaml_emitter_emit(&emitter
, &event
))
991 if (emit_scop(&emitter
, scop
) < 0)
994 if (!yaml_document_end_event_initialize(&event
, 1))
996 if (!yaml_emitter_emit(&emitter
, &event
))
999 yaml_stream_end_event_initialize(&event
);
1000 if (!yaml_emitter_emit(&emitter
, &event
))
1003 yaml_emitter_delete(&emitter
);
1006 yaml_emitter_delete(&emitter
);