/* * call-seq: generate(obj) * * Generates a valid JSON document from object +obj+ and returns the * result. If no valid JSON document can be created this method raises a * GeneratorError exception. */ static VALUE cState_generate(VALUE self, VALUE obj) { VALUE result = cState_partial_generate(self, obj); VALUE re, args[2]; GET_STATE(self); if (!state->quirks_mode) { args[0] = rb_str_new2("\\A\\s*(?:\\[.*\\]|\\{.*\\})\\s*\\Z"); args[1] = CRegexp_MULTILINE; re = rb_class_new_instance(2, args, rb_cRegexp); if (NIL_P(rb_funcall(re, i_match, 1, result))) { rb_raise(eGeneratorError, "only generation of JSON objects or arrays allowed"); } } return result; }