summaryrefslogtreecommitdiff
path: root/ext
diff options
context:
space:
mode:
authorFlorian Frank <flori@ping.de>2011-07-08 16:29:21 +0200
committerFlorian Frank <flori@ping.de>2011-07-08 16:32:06 +0200
commitf7f78896607b6f6226cdee4ae76de922d4583d32 (patch)
treefb8b18ce241984a125d881c29fd317a007358bd9 /ext
parentdcfa15b6a1179a29d4ee7b3ff16807fa9b1f96a4 (diff)
parent24f84d63beef15eafd2e59df3d809f1928774d00 (diff)
downloadjson-f7f78896607b6f6226cdee4ae76de922d4583d32.tar.gz
Merge branch 'master' of https://github.com/nobu/json into development
Conflicts: ext/json/ext/parser/parser.c
Diffstat (limited to 'ext')
-rw-r--r--ext/json/ext/parser/parser.c15
-rw-r--r--ext/json/ext/parser/parser.rl5
2 files changed, 11 insertions, 9 deletions
diff --git a/ext/json/ext/parser/parser.c b/ext/json/ext/parser/parser.c
index 4910865..af57b81 100644
--- a/ext/json/ext/parser/parser.c
+++ b/ext/json/ext/parser/parser.c
@@ -233,9 +233,9 @@ tr11:
p--; {p++; cs = 9; goto _out;}
} else {
if (NIL_P(json->object_class)) {
- rb_hash_aset(*result, last_name, v);
+ rb_hash_aset(*result, last_name, v);
} else {
- rb_funcall(*result, i_aset, 2, last_name, v);
+ rb_funcall(*result, i_aset, 2, last_name, v);
}
{p = (( np))-1;}
}
@@ -1583,6 +1583,7 @@ static VALUE convert_encoding(VALUE source)
} else if (len >= 4 && ptr[1] == 0 && ptr[3] == 0) {
source = rb_funcall(source, i_encode, 2, CEncoding_UTF_8, CEncoding_UTF_16LE);
} else {
+ source = rb_str_dup(source);
FORCE_UTF8(source);
}
} else {
@@ -1733,16 +1734,16 @@ static VALUE cParser_parse(VALUE self)
GET_PARSER;
-#line 1737 "parser.c"
+#line 1738 "parser.c"
{
cs = JSON_start;
}
-#line 734 "parser.rl"
+#line 735 "parser.rl"
p = json->source;
pe = p + json->len;
-#line 1746 "parser.c"
+#line 1747 "parser.c"
{
if ( p == pe )
goto _test_eof;
@@ -1819,7 +1820,7 @@ st10:
if ( ++p == pe )
goto _test_eof10;
case 10:
-#line 1823 "parser.c"
+#line 1824 "parser.c"
switch( (*p) ) {
case 13: goto st10;
case 32: goto st10;
@@ -1876,7 +1877,7 @@ case 9:
_out: {}
}
-#line 737 "parser.rl"
+#line 738 "parser.rl"
if (cs >= JSON_first_final && p == pe) {
return result;
diff --git a/ext/json/ext/parser/parser.rl b/ext/json/ext/parser/parser.rl
index b18f06f..21b445e 100644
--- a/ext/json/ext/parser/parser.rl
+++ b/ext/json/ext/parser/parser.rl
@@ -120,9 +120,9 @@ static ID i_json_creatable_p, i_json_create, i_create_id, i_create_additions,
fhold; fbreak;
} else {
if (NIL_P(json->object_class)) {
- rb_hash_aset(*result, last_name, v);
+ rb_hash_aset(*result, last_name, v);
} else {
- rb_funcall(*result, i_aset, 2, last_name, v);
+ rb_funcall(*result, i_aset, 2, last_name, v);
}
fexec np;
}
@@ -581,6 +581,7 @@ static VALUE convert_encoding(VALUE source)
} else if (len >= 4 && ptr[1] == 0 && ptr[3] == 0) {
source = rb_funcall(source, i_encode, 2, CEncoding_UTF_8, CEncoding_UTF_16LE);
} else {
+ source = rb_str_dup(source);
FORCE_UTF8(source);
}
} else {