88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
|
# File 'ext/jq_core.c', line 88
static VALUE rb_jq_update(VALUE self, VALUE buf, VALUE v_is_partial) {
struct jq_container *p;
int is_partial = v_is_partial ? 1 : 0;
int status = 0;
VALUE errmsg = Qnil;
if (!rb_block_given_p()) {
rb_raise(rb_eArgError, "no block given");
}
Data_Get_Struct(self, struct jq_container, p);
Check_Type(buf, T_STRING);
if (!p->parser) {
p->parser = jv_parser_new(0);
}
jv_parser_set_buf(p->parser, RSTRING_PTR(buf), RSTRING_LEN(buf), is_partial);
jq_parse(p->jq, p->parser, rb_yield, &status, &errmsg);
if (!is_partial) {
jv_parser_free(p->parser);
p->parser = NULL;
}
if (status != 0) {
rb_jump_tag(status);
}
if (!NIL_P(errmsg)) {
rb_raise(rb_eJQ_Error, "%s", RSTRING_PTR(errmsg));
}
return Qnil;
}
|