9 years agoNormalize whitespace in Makefile
Paul J. Davis [Tue, 23 Oct 2012 19:21:53 +0000 (14:21 -0500)] 
Normalize whitespace in Makefile

9 years agoAdd PHONY targets for safety
Paul J. Davis [Tue, 23 Oct 2012 19:20:52 +0000 (14:20 -0500)] 
Add PHONY targets for safety

Just trying to be a bit more thorough in the Makefile targets.

9 years agoAdd a distclean target for Make
Paul J. Davis [Tue, 23 Oct 2012 19:18:49 +0000 (14:18 -0500)] 
Add a distclean target for Make

This runs a `git clean -fxd` to revert to a pristine Git clone.

9 years agoUse the Git protocol for PropEr
Paul J. Davis [Tue, 23 Oct 2012 19:15:44 +0000 (14:15 -0500)] 
Use the Git protocol for PropEr

I've had reports that HTTPS seems to fail a bit more often than the Git
URLs. I've seen this before as well so I've gone ahead and switched
protocols for the clone.

10 years agoFix code reloading for Jiffy 0.5.2
Paul J. Davis [Thu, 7 Jun 2012 18:15:38 +0000 (13:15 -0500)] 
Fix code reloading for Jiffy

As it turns out I did not understand the documenation for
load/upgrade/unload correctly. load/upgrade are called conditionally if
there's code in the VM for the NIF. Ie, no code means load is called,
where as if code exists, upgrade is called.

unload is called regardless once per load/unload. This means that
load/upgrade in Jiffy's case will each create a state object and unload
will free it each time. I was missing the fact that unload is called
every time and hence I don't need to clear the state in upgrade.

10 years agoBe paranoid about the values sent to upgrade 0.5.1
Paul J. Davis [Thu, 7 Jun 2012 00:24:53 +0000 (19:24 -0500)] 
Be paranoid about the values sent to upgrade

The docs aren't entirely clear on the order of calls for upgrades so
this is mostly just in case old_priv ever happens to not be what load
returned in priv.

10 years agoFix hot code upgrades 0.5.0
Paul J. Davis [Thu, 7 Jun 2012 00:18:11 +0000 (19:18 -0500)] 
Fix hot code upgrades

10 years agoFix compiler warning for gcc 4.4.3 0.4.5
Paul J. Davis [Tue, 5 Jun 2012 19:13:38 +0000 (14:13 -0500)] 
Fix compiler warning for gcc 4.4.3

10 years agoUpdate rebar to 2.0.0
Paul J. Davis [Tue, 5 Jun 2012 19:13:28 +0000 (14:13 -0500)] 
Update rebar to 2.0.0

10 years agoAdd an option to ignore UTF-8 encoding errors 0.4.4
Paul J. Davis [Fri, 1 Jun 2012 14:53:41 +0000 (09:53 -0500)] 
Add an option to ignore UTF-8 encoding errors

By default Jiffy is quite strict in what it encodes. By default it will
not allow invalid UTF-8 to be produced. This can cause issues when
attempting to encode JSON that was decoded by other libraries as UTF-8
semantics are not uniformly enforced.

This patch adds an option 'force_utf8' to the encoder. If encoding hits
an error for an invalid string it will forcefully mutate the object to
contain only valid UTF-8 and return the resulting encoded JSON.

For the most part this means it will strip any garbage data from
binaries replacing it replacement codepoint U+FFFD. Although, it will
also try and the common error of encoding surrogate pairs as three-byte
sequences and reencode them into UTF-8 properly.

10 years agoUpdate rebar and the Makefile 0.4.3
Benoit Chesneau [Fri, 20 Apr 2012 15:09:49 +0000 (17:09 +0200)] 
Update rebar and the Makefile

  * Update rebar to a more recent version
  * Update rebar.config for deprecation warnings
  * Allow people to export the REBAR environment variable to use
    their own version of rebar
  * Fixed `make clean`

10 years agoWindows: MSVC compatibility
Dave Cottlehuber [Sun, 8 Apr 2012 14:54:42 +0000 (10:54 -0400)] 
Windows: MSVC compatibility

10 years agoFix segfaul when encoding with the uescape option 0.4.2
Paul J. Davis [Wed, 25 Apr 2012 19:13:12 +0000 (14:13 -0500)] 
Fix segfaul when encoding with the uescape option

There was a bug that was resetting the extra amount of space needed when
encoding unicode characters with the `uescape` option enabled.

10 years agoCleanup Makefile
Paul J. Davis [Mon, 23 Apr 2012 18:05:40 +0000 (13:05 -0500)] 
Cleanup Makefile

10 years agoFix silly error in the README
Paul J. Davis [Wed, 21 Mar 2012 23:10:50 +0000 (18:10 -0500)] 
Fix silly error in the README

10 years agoFix uescapes for combining characters 0.4.1
Paul J. Davis [Thu, 15 Mar 2012 22:33:15 +0000 (17:33 -0500)] 
Fix uescapes for combining characters

I had a silly direction mistake in a bit shift that was causing the high
portion of all combining characters to be printed as \uD800 which is
obviously wrong. This bug only affects people using the non-default
uescape option during encoding.

10 years agoUpdated rebar to latest master
Paul J. Davis [Sat, 25 Feb 2012 16:39:32 +0000 (10:39 -0600)] 
Updated rebar to latest master

10 years agoEnsure that encoded doubles have a decimal point 0.4.0
Paul J. Davis [Sun, 12 Feb 2012 17:27:55 +0000 (11:27 -0600)] 
Ensure that encoded doubles have a decimal point

Numbers like 1.0 were being encoded as <<"1">> which can lead to a bit
of confusion. This merely checks if a decimial point exists and if not
it appends ".0" to the value.

10 years agoAllow iolists to be passed directly to decode/1 0.3.0
Paul J. Davis [Tue, 10 Jan 2012 16:28:07 +0000 (10:28 -0600)] 
Allow iolists to be passed directly to decode/1

Fixes #15

10 years agoAdd pretty print
Sergey Urbanovich [Sun, 11 Dec 2011 14:11:56 +0000 (18:11 +0400)] 
Add pretty print

jiffy:encode/2 now accepts a 'pretty' option that will format the JSON
output using two-space indents.

10 years agoReduce PropEr test size for speed
Paul J. Davis [Sun, 8 Jan 2012 22:07:39 +0000 (16:07 -0600)] 
Reduce PropEr test size for speed

I need to fix this so that object sizes don't explode when generating
larger values. Basically, as the type generator recurses is should be
adjusting the size value.

10 years agoAvoid false dialyzer warnings by using erlang:nif_error/1
Jeremy Raymond [Fri, 6 Jan 2012 18:17:21 +0000 (13:17 -0500)] 
Avoid false dialyzer warnings by using erlang:nif_error/1

10 years agoclean test/*.beam
benoitc [Tue, 3 Jan 2012 22:54:21 +0000 (23:54 +0100)] 
clean test/*.beam

10 years agoAdjust number ranges to show bignum support
Paul J. Davis [Sun, 8 Jan 2012 20:59:48 +0000 (14:59 -0600)] 
Adjust number ranges to show bignum support

Looks like there's a slight difference in the number of significant
digits supported across platforms in strtod. This just adds a couple to
force it into the bignum code.

10 years agoLimit test case in the interest of speed
Paul J. Davis [Sun, 8 Jan 2012 20:43:47 +0000 (14:43 -0600)] 
Limit test case in the interest of speed

10 years agoDon't generate invalid UTF-8 in PropEr tests
Paul J. Davis [Sun, 8 Jan 2012 20:43:26 +0000 (14:43 -0600)] 
Don't generate invalid UTF-8 in PropEr tests

10 years agoLeave a note about further improvments
Paul J. Davis [Mon, 14 Nov 2011 00:30:03 +0000 (18:30 -0600)] 
Leave a note about further improvments

10 years agoRemove atom generation
Paul J. Davis [Mon, 14 Nov 2011 00:28:05 +0000 (18:28 -0600)] 
Remove atom generation

Not only was I not actually sending atoms to Jiffy, the test will end up
exhausting the atom table and crashing the Erlang VM.

10 years agoImplement PropEr tests for JSON parsing
Paul J. Davis [Mon, 14 Nov 2011 00:00:23 +0000 (18:00 -0600)] 
Implement PropEr tests for JSON parsing

Big thanks to Dmitry Groshev [1] for help getting PropEr tests into
Jiffy. These generate valid EJSON to check parsing as well as check
that random inputs don't cause segfaults or other nasty effects.

Future improvements would be to write a JSON generator as well as a
version that introduces known errors into the binary for checking known
parsing errors as well.


Fixes: #10

10 years agoChange test case file extension
Paul J. Davis [Sun, 13 Nov 2011 22:08:06 +0000 (16:08 -0600)] 
Change test case file extension

Rebar's eunit command wants to try and compile anything named *.erl in
the tests/ directory which causes errors with the test expectation
files. Rather than write a patch for rebar it was easier to just rename

10 years agoFix test plan for 004-strings.t
Paul J. Davis [Mon, 31 Oct 2011 21:24:27 +0000 (16:24 -0500)] 
Fix test plan for 004-strings.t

10 years agoRemove trailing whitespace
Paul J. Davis [Mon, 31 Oct 2011 21:23:46 +0000 (16:23 -0500)] 
Remove trailing whitespace

10 years agoEnforce Unicode constraints more strictly
Paul J. Davis [Mon, 31 Oct 2011 21:07:39 +0000 (16:07 -0500)] 
Enforce Unicode constraints more strictly

It was possible to pass some types of invalid UTF-8 through Jiffy's
encoder. Specifically, if uescaping isn't used, values that would decode
from 0xD800 to 0xDFFFF, 0xFFFE, 0xFFFF, and values greater than 0x10FFFF
would not be flagged as invalid. Now they are.

11 years agoFix uescape encoding bug 0.2.0
Paul J. Davis [Sun, 28 Aug 2011 22:13:52 +0000 (17:13 -0500)] 
Fix uescape encoding bug

The encoding length for unicode values was applied to the wrong index

Thanks to Paul Guyot for the detailed bug report and fix.

Fixes #7

11 years agoFixed large number encoding on 32bit architectures
Paul J. Davis [Wed, 3 Aug 2011 19:35:18 +0000 (14:35 -0500)] 
Fixed large number encoding on 32bit architectures

I was accidentally truncating numbers when casting to long on
machines that don't have longs that are 8 bytes.

Fixes #5

11 years agoRemove reloading entry from
Paul J. Davis [Wed, 3 Aug 2011 17:00:00 +0000 (12:00 -0500)] 
Remove reloading entry from

Multiple error reports on this.

Fixes #6

11 years agoFailing regression test for the halfword emulator.
Paul Davis [Wed, 29 Jun 2011 22:13:37 +0000 (18:13 -0400)] 
Failing regression test for the halfword emulator.

11 years agoImproved NIF initialization.
Paul J. Davis [Mon, 13 Jun 2011 13:03:49 +0000 (09:03 -0400)] 
Improved NIF initialization.

11 years agoDocument the API updates.
Paul J. Davis [Mon, 13 Jun 2011 12:49:04 +0000 (08:49 -0400)] 
Document the API updates.

11 years agoUpdated the allocation scheme in the encoder.
Paul J. Davis [Sat, 28 May 2011 19:02:10 +0000 (15:02 -0400)] 
Updated the allocation scheme in the encoder.

Based on the buffer doubling scheme in Yajl. This seems to make
Jiffy's encoder times less spikey, but I'm still a bit slower. It
appears to be related to floats or memory handling. Not sure how
to track this down.

11 years agoAdd an encoder option to escape unicode.
Paul J. Davis [Sat, 28 May 2011 15:40:32 +0000 (11:40 -0400)] 
Add an encoder option to escape unicode.

The encoder can now return \u escaped unicode data instead of leaving
it as UTF-8 byte sequences. This done like so:

    Eshell V5.8.3  (abort with ^G)
    1> jiffy:encode(<<240, 144, 129, 128>>, [uescape]).

11 years agoAPI Change - No more {ok, Value} wrapping.
Paul J. Davis [Fri, 27 May 2011 23:30:22 +0000 (19:30 -0400)] 
API Change - No more {ok, Value} wrapping.

The encode and decode functions now return the value directly without
being wrapped in a tuple on success. If there is an error, it is
thrown. This is to more closely match the semantics of term_to_binary
and binary_to_term.

11 years agoUse git version info. 0.1.0
Paul J. Davis [Sun, 10 Apr 2011 19:29:06 +0000 (15:29 -0400)] 
Use git version info.

11 years agoMark source code with MIT license info.
Paul J. Davis [Sun, 10 Apr 2011 19:01:30 +0000 (15:01 -0400)] 
Mark source code with MIT license info.

Feed the lawyers.

11 years agoMore OCD on padding issue.
Paul J. Davis [Fri, 8 Apr 2011 00:27:28 +0000 (20:27 -0400)] 
More OCD on padding issue.

11 years agoOCD on the header width.
Paul J. Davis [Fri, 8 Apr 2011 00:26:45 +0000 (20:26 -0400)] 
OCD on the header width.

11 years agoAdded round trip info to README.
Paul J. Davis [Fri, 8 Apr 2011 00:26:02 +0000 (20:26 -0400)] 
Added round trip info to README.

11 years agoMore README updates.
Paul J. Davis [Fri, 8 Apr 2011 00:20:24 +0000 (20:20 -0400)] 
More README updates.

11 years agoSome updates to the README
Paul J. Davis [Fri, 8 Apr 2011 00:14:05 +0000 (20:14 -0400)] 
Some updates to the README

11 years agoAdd tests for invalid utf-8
Paul J. Davis [Thu, 7 Apr 2011 23:56:32 +0000 (19:56 -0400)] 
Add tests for invalid utf-8

11 years agoImprove support for bignums.
Paul J. Davis [Thu, 7 Apr 2011 00:56:24 +0000 (20:56 -0400)] 
Improve support for bignums.

Any number that can't be decoded in C is now passed back
to Erlang for decoding.

Large numbers passed to the encoder will make it through
and be processed in Erlang after the main encoding

11 years agoSlight comment rewording.
Paul J. Davis [Wed, 6 Apr 2011 23:21:29 +0000 (19:21 -0400)] 
Slight comment rewording.

11 years agoFixed encoder segfault.
Paul J. Davis [Tue, 5 Apr 2011 00:44:03 +0000 (20:44 -0400)] 
Fixed encoder segfault.

I was being an absolute moron and not adjusting my two access
pointers to the data buffer after a realloc.

11 years agoFix issues with garbage collection.
Paul J. Davis [Mon, 4 Apr 2011 23:17:20 +0000 (19:17 -0400)] 
Fix issues with garbage collection.

* Refs became atoms to make sure they can live across calls
  to the NIF functions.
* Initialized curr in decode so that I'm no longer pushing
  random values into the Erlang VM.

11 years agoAdded a readme.
Paul J. Davis [Sun, 3 Apr 2011 23:27:49 +0000 (19:27 -0400)] 
Added a readme.

11 years agoInitial import.
Paul J. Davis [Sun, 3 Apr 2011 23:27:04 +0000 (19:27 -0400)] 
Initial import.

Passes all eep0018 tests.