1#include "EXTERN.h"
2#include "perl.h"
3#include "XSUB.h"
4
5#define NEED_eval_pv
6#define NEED_grok_hex
7#define NEED_grok_number
8#define NEED_grok_numeric_radix
9#define NEED_grok_oct
10#define NEED_newRV_noinc
11#define NEED_newSVpvn_share
12#define NEED_sv_2pv_flags
13
14#include "ppport.h"
15#include "ppport_math.h"
16#include "ppport_sort.h"
17
18#ifndef is_utf8_string
19#define is_utf8_string(x, y) (0==1)
20#endif
21
22#undef DEBUG /* maybe defined in perl.h */
23#include <syck.h>
24
25#ifndef newSVpvn_share
26#define newSVpvn_share(x, y, z) newSVpvn(x, y)
27#endif
28
29/*
30#undef ASSERT
31#include "Storable.xs"
32*/
33
34struct emitter_xtra {
35    SV* port;
36    char* tag;
37    char dump_code;
38    bool implicit_binary;
39};
40
41struct parser_xtra {
42    AV *objects;
43    bool implicit_unicode;
44    bool load_code;
45};
46
47SV* perl_syck_lookup_sym( SyckParser *p, SYMID v) {
48    /* Not "undef" becase otherwise we have a warning on self-recursive nodes */
49    SV *obj = &PL_sv_no;
50    syck_lookup_sym(p, v, (char **)&obj);
51    return obj;
52}
53
54#ifdef SvUTF8_on
55#define CHECK_UTF8 \
56    if (((struct parser_xtra *)p->bonus)->implicit_unicode \
57      && is_utf8_string((U8*)n->data.str->ptr, n->data.str->len)) \
58        SvUTF8_on(sv);
59#else
60#define CHECK_UTF8 ;
61#endif
62
63SyckNode * perl_syck_bad_anchor_handler(SyckParser *p, char *a) {
64    SyckNode *badanc = syck_new_map(
65        (SYMID)newSVpvn_share("name", 4, 0),
66        (SYMID)newSVpvn_share(a, strlen(a), 0)
67    );
68    badanc->type_id = syck_strndup( "!perl:YAML::Syck::BadAlias", 25 );
69    return badanc;
70}
71
72void perl_syck_error_handler(SyckParser *p, char *msg) {
73    croak(form( "%s parser (line %d, column %d): %s",
74        "Syck",
75        p->linect + 1,
76        p->cursor - p->lineptr,
77        msg ));
78}
79
80void perl_syck_output_handler(SyckEmitter *e, char *str, long len) {
81    struct emitter_xtra *bonus = (struct emitter_xtra *)e->bonus;
82    sv_catpvn_nomg(bonus->port, str, len);
83}
84
85