summaryrefslogtreecommitdiff
path: root/ext
diff options
context:
space:
mode:
authorLamont Granquist <lamont@scriptkiddie.org>2014-06-14 13:35:01 -0700
committerLamont Granquist <lamont@scriptkiddie.org>2014-06-14 13:35:01 -0700
commit4d056c20768cb8e5a8169ee5d6bf46fc82e19f19 (patch)
tree965f4729fe66738b9018d3d04391dbad80a0c443 /ext
parent31c6704a67038fd85b1e70e5f72f1b82626f9f2a (diff)
downloadffi-yajl-4d056c20768cb8e5a8169ee5d6bf46fc82e19f19.tar.gz
allow_comments support for C ext
Diffstat (limited to 'ext')
-rw-r--r--ext/ffi_yajl/ext/parser/parser.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/ext/ffi_yajl/ext/parser/parser.c b/ext/ffi_yajl/ext/parser/parser.c
index f9f5cc2..5100e2d 100644
--- a/ext/ffi_yajl/ext/parser/parser.c
+++ b/ext/ffi_yajl/ext/parser/parser.c
@@ -164,15 +164,15 @@ static yajl_callbacks callbacks = {
end_array_callback,
};
-int get_symbolize_keys(VALUE self) {
+int get_opts_key(VALUE self, char *key) {
VALUE opts = rb_iv_get(self, "@opts");
if (TYPE(opts) != T_HASH) {
rb_raise(rb_eTypeError, "opts is not a valid hash");
}
- return rb_hash_aref(opts, ID2SYM(rb_intern("symbolize_keys"))) == Qtrue;
+ return rb_hash_aref(opts, ID2SYM(rb_intern(key))) == Qtrue;
}
-static VALUE mParser_do_yajl_parse(VALUE self, VALUE str, VALUE opts) {
+static VALUE mParser_do_yajl_parse(VALUE self, VALUE str, VALUE yajl_opts) {
yajl_handle hand;
yajl_status stat;
unsigned char *err;
@@ -182,9 +182,14 @@ static VALUE mParser_do_yajl_parse(VALUE self, VALUE str, VALUE opts) {
rb_ivar_set(self, rb_intern("key_stack"), rb_ary_new());
ctx.self = self;
- ctx.symbolizeKeys = get_symbolize_keys(self);
+ ctx.symbolizeKeys = get_opts_key(self, "symbolize_keys");
hand = yajl_alloc(&callbacks, NULL, (void *)&ctx);
+
+ if (rb_hash_aref(yajl_opts, ID2SYM(rb_intern("yajl_allow_comments")))) {
+ yajl_config(hand, yajl_allow_comments, 1);
+ }
+
if ((stat = yajl_parse(hand, (unsigned char *)RSTRING_PTR(str), RSTRING_LEN(str))) != yajl_status_ok) {
err = yajl_get_error(hand, 1, (unsigned char *)RSTRING_PTR(str), RSTRING_LEN(str));
goto raise;