new (JSON::Ext::Generator::State)

    /*
     * call-seq: new(opts = {})
     *
     * Instantiates a new State object, configured by _opts_.
     *
     * _opts_ can have the following keys:
     *
     * * *indent*: a string used to indent levels (default: ''),
     * * *space*: a string that is put after, a : or , delimiter (default: ''),
     * * *space_before*: a string that is put before a : pair delimiter (default: ''),
     * * *object_nl*: a string that is put at the end of a JSON object (default: ''),
     * * *array_nl*: a string that is put at the end of a JSON array (default: ''),
     * * *check_circular*: true if checking for circular data structures
     *   should be done, false (the default) otherwise.
     * * *allow_nan*: true if NaN, Infinity, and -Infinity should be
     *   generated, otherwise an exception is thrown, if these values are
     *   encountered. This options defaults to false.
     */
    static VALUE cState_initialize(int argc, VALUE *argv, VALUE self)
    {
        VALUE opts;
        GET_STATE(self);

        rb_scan_args(argc, argv, "01", &opts);
        state->indent = rb_str_new2("");
        state->space = rb_str_new2("");
        state->space_before = rb_str_new2("");
        state->array_nl = rb_str_new2("");
        state->object_nl = rb_str_new2("");
        if (NIL_P(opts)) {
            state->check_circular = 1;
            state->allow_nan = 0;
            state->max_nesting = 19;
        } else {
            cState_configure(self, opts);
        }
        state->seen = rb_hash_new();
        state->memo = Qnil;
        state->depth = INT2FIX(0);
        return self;
    }