summaryrefslogtreecommitdiff
path: root/lib/ffi_yajl/ffi
diff options
context:
space:
mode:
authorLamont Granquist <lamont@scriptkiddie.org>2013-12-08 23:36:50 -0800
committerLamont Granquist <lamont@scriptkiddie.org>2013-12-08 23:36:50 -0800
commit0ce27f29202be406a41fce56d38d6da6c7715afd (patch)
tree2c5417be6e9858fbd53710f6f7c11bd5d95b2c53 /lib/ffi_yajl/ffi
parentfadb3e607a15636c36c06db84b2e00559bc8bdff (diff)
downloadffi-yajl-0ce27f29202be406a41fce56d38d6da6c7715afd.tar.gz
bignum parsing working
Diffstat (limited to 'lib/ffi_yajl/ffi')
-rw-r--r--lib/ffi_yajl/ffi/parser.rb14
1 files changed, 9 insertions, 5 deletions
diff --git a/lib/ffi_yajl/ffi/parser.rb b/lib/ffi_yajl/ffi/parser.rb
index acfdafa..05fa11e 100644
--- a/lib/ffi_yajl/ffi/parser.rb
+++ b/lib/ffi_yajl/ffi/parser.rb
@@ -44,12 +44,16 @@ module FFI_Yajl
ctx_mapping[ctx.get_ulong(0)].set_value(intval)
1
end
- @double_callback = ::FFI::Function.new(:int, [:pointer, :double]) do |ctx, doubleval|
- ctx_mapping[ctx.get_ulong(0)].set_value(doubleval)
+ @number_callback = ::FFI::Function.new(:int, [:pointer, :string, :size_t ]) do |ctx, stringval, stringlen|
+ s = stringval.slice(0,stringlen)
+ s.force_encoding('UTF-8') if defined? Encoding
+ # XXX: I can't think of a better way to do this right now. need to call to_f if and only if its a float.
+ v = ( s =~ /\./ ) ? s.to_f : s.to_i
+ ctx_mapping[ctx.get_ulong(0)].set_value(v)
1
end
- @number_callback = ::FFI::Function.new(:int, [:pointer, :pointer, :size_t]) do |ctx, numberval, numberlen|
- raise "NumberCallback: not implemented"
+ @double_callback = ::FFI::Function.new(:int, [:pointer, :double]) do |ctx, doubleval|
+ ctx_mapping[ctx.get_ulong(0)].set_value(doubleval)
1
end
@string_callback = ::FFI::Function.new(:int, [:pointer, :string, :size_t]) do |ctx, stringval, stringlen|
@@ -101,7 +105,7 @@ module FFI_Yajl
callbacks[:yajl_boolean] = @boolean_callback
callbacks[:yajl_integer] = @integer_callback
callbacks[:yajl_double] = @double_callback
- callbacks[:yajl_number] = nil #NumberCallback
+ callbacks[:yajl_number] = @number_callback
callbacks[:yajl_string] = @string_callback
callbacks[:yajl_start_map] = @start_map_callback
callbacks[:yajl_map_key] = @map_key_callback