From 1628bbf95f8a58424dd3928692fcbf0f307272ec Mon Sep 17 00:00:00 2001 From: David Tolnay Date: Sun, 19 Jul 2015 09:36:16 -0700 Subject: [PATCH] Clean up trailing whitespace --- builtin.c | 24 +-- bytecode.c | 10 +- bytecode.h | 2 +- compile.c | 18 +-- exec_stack.h | 2 +- execute.c | 16 +- jq_test.c | 6 +- jv.c | 44 +++--- jv.h | 2 +- jv_aux.c | 18 +-- jv_dtoa.c | 2 +- jv_parse.c | 16 +- jv_print.c | 6 +- parser.c | 437 +++++++++++++++++++++++++-------------------------- parser.h | 5 +- parser.y | 76 ++++----- util.c | 4 +- 17 files changed, 343 insertions(+), 345 deletions(-) diff --git a/builtin.c b/builtin.c index d2e0628b..16f9e156 100644 --- a/builtin.c +++ b/builtin.c @@ -69,7 +69,7 @@ static jv f_plus(jq_state *jq, jv input, jv a, jv b) { jv_free(b); return a; } else if (jv_get_kind(a) == JV_KIND_NUMBER && jv_get_kind(b) == JV_KIND_NUMBER) { - return jv_number(jv_number_value(a) + + return jv_number(jv_number_value(a) + jv_number_value(b)); } else if (jv_get_kind(a) == JV_KIND_STRING && jv_get_kind(b) == JV_KIND_STRING) { return jv_string_concat(a, b); @@ -238,7 +238,7 @@ static jv f_multiply(jq_state *jq, jv input, jv a, jv b) { return jv_object_merge_recursive(a, b); } else { return type_error2(a, b, "cannot be multiplied"); - } + } } static jv f_divide(jq_state *jq, jv input, jv a, jv b) { @@ -251,7 +251,7 @@ static jv f_divide(jq_state *jq, jv input, jv a, jv b) { return jv_string_split(a, b); } else { return type_error2(a, b, "cannot be divided"); - } + } } static jv f_mod(jq_state *jq, jv input, jv a, jv b) { @@ -262,7 +262,7 @@ static jv f_mod(jq_state *jq, jv input, jv a, jv b) { return jv_number((intmax_t)jv_number_value(a) % (intmax_t)jv_number_value(b)); } else { return type_error2(a, b, "cannot be divided (remainder)"); - } + } } static jv f_equal(jq_state *jq, jv input, jv a, jv b) { @@ -572,7 +572,7 @@ static jv f_sort(jq_state *jq, jv input){ } static jv f_sort_by_impl(jq_state *jq, jv input, jv keys) { - if (jv_get_kind(input) == JV_KIND_ARRAY && + if (jv_get_kind(input) == JV_KIND_ARRAY && jv_get_kind(keys) == JV_KIND_ARRAY && jv_array_length(jv_copy(input)) == jv_array_length(jv_copy(keys))) { return jv_sort(input, keys); @@ -582,7 +582,7 @@ static jv f_sort_by_impl(jq_state *jq, jv input, jv keys) { } static jv f_group_by_impl(jq_state *jq, jv input, jv keys) { - if (jv_get_kind(input) == JV_KIND_ARRAY && + if (jv_get_kind(input) == JV_KIND_ARRAY && jv_get_kind(keys) == JV_KIND_ARRAY && jv_array_length(jv_copy(input)) == jv_array_length(jv_copy(keys))) { return jv_group(input, keys); @@ -668,7 +668,7 @@ static jv f_match(jq_state *jq, jv input, jv regex, jv modifiers, jv testmode) { } } jv_free(modarray); - } else if (jv_get_kind(modifiers) != JV_KIND_NULL) { + } else if (jv_get_kind(modifiers) != JV_KIND_NULL) { // If it isn't a string or null, then it is the wrong type... jv_free(input); jv_free(regex); @@ -695,7 +695,7 @@ static jv f_match(jq_state *jq, jv input, jv regex, jv modifiers, jv testmode) { const UChar* end = start + length; region = onig_region_new(); do { - onigret = onig_search(reg, + onigret = onig_search(reg, (const UChar*)jv_string_value(input), end, /* string boundaries */ start, end, /* search boundaries */ region, ONIG_OPTION_NONE); @@ -1238,7 +1238,7 @@ static jv f_current_line(jq_state *jq) { #define LIBM_DDD(name) \ {(cfunction_ptr)f_ ## name, "_" #name, 3}, #define LIBM_DDD_NO(name) - + static const struct cfunction function_list[] = { #include "libm.h" {(cfunction_ptr)f_plus, "_plus", 3}, @@ -1326,7 +1326,7 @@ static block bind_bytecoded_builtins(block b) { } { struct bytecoded_builtin builtin_def_1arg[] = { - {"path", BLOCK(gen_op_simple(PATH_BEGIN), + {"path", BLOCK(gen_op_simple(PATH_BEGIN), gen_call("arg", gen_noop()), gen_op_simple(PATH_END))}, }; @@ -1340,14 +1340,14 @@ static block bind_bytecoded_builtins(block b) { // Note that we can now define `range` as a jq-coded function block rangevar = gen_op_var_fresh(STOREV, "rangevar"); block init = BLOCK(gen_op_simple(DUP), gen_call("start", gen_noop()), rangevar); - block range = BLOCK(init, + block range = BLOCK(init, gen_call("end", gen_noop()), gen_op_bound(RANGE, rangevar)); builtins = BLOCK(builtins, gen_function("range", BLOCK(gen_param("start"), gen_param("end")), range)); } - + return block_bind_referenced(builtins, b, OP_IS_CALL_PSEUDO); } diff --git a/bytecode.c b/bytecode.c index 14e413a2..0ef154b8 100644 --- a/bytecode.c +++ b/bytecode.c @@ -106,10 +106,10 @@ void dump_operation(struct bytecode* bc, uint16_t* codeptr) { jv name; if (idx & ARG_NEWCLOSURE) { idx &= ~ARG_NEWCLOSURE; - name = jv_object_get(jv_copy(getlevel(bc,level)->subfunctions[idx]->debuginfo), + name = jv_object_get(jv_copy(getlevel(bc,level)->subfunctions[idx]->debuginfo), jv_string("name")); } else { - name = jv_array_get(jv_object_get(jv_copy(getlevel(bc,level)->debuginfo), + name = jv_array_get(jv_object_get(jv_copy(getlevel(bc,level)->debuginfo), jv_string("params")), idx); } printf(" %s:%d", @@ -133,8 +133,8 @@ void dump_operation(struct bytecode* bc, uint16_t* codeptr) { } else if (op->flags & OP_HAS_VARIABLE) { uint16_t v = bc->code[pc++]; jv name = jv_array_get(jv_object_get(jv_copy(getlevel(bc,imm)->debuginfo), jv_string("locals")), v); - printf(" $%s:%d", - jv_string_value(name), + printf(" $%s:%d", + jv_string_value(name), v); jv_free(name); if (imm) { @@ -143,7 +143,7 @@ void dump_operation(struct bytecode* bc, uint16_t* codeptr) { } else { printf(" %d", imm); } - } + } } void bytecode_free(struct bytecode* bc) { diff --git a/bytecode.h b/bytecode.h index 8662c4d9..6cb49f7a 100644 --- a/bytecode.h +++ b/bytecode.h @@ -11,7 +11,7 @@ typedef enum { } opcode; enum { - NUM_OPCODES = + NUM_OPCODES = #define OP(name, imm, in, out) +1 #include "opcode_list.h" #undef OP diff --git a/compile.c b/compile.c index e7f3d698..407e9f05 100644 --- a/compile.c +++ b/compile.c @@ -14,7 +14,7 @@ /* The intermediate representation for jq filters is as a sequence of struct inst, which form a doubly-linked list via the next and prev - pointers. + pointers. A "block" represents a sequence of "struct inst", which may be empty. @@ -28,7 +28,7 @@ struct inst { struct inst* prev; opcode op; - + struct { uint16_t intval; struct inst* target; @@ -45,7 +45,7 @@ struct inst { // inst->bound_by = NULL - Unbound free variable // inst->bound_by = inst - This instruction binds a variable // inst->bound_by = other - Uses variable bound by other instruction - // Unbound instructions (references to other things that may or may not + // Unbound instructions (references to other things that may or may not // exist) are created by "gen_foo_unbound", and bindings are created by // block_bind(definition, body), which binds all instructions in // body which are unboudn and refer to "definition" by name. @@ -288,7 +288,7 @@ static int block_count_actuals(block b) { for (inst* i = b.first; i; i = i->next) { switch (i->op) { default: assert(0 && "Unknown function type"); break; - case CLOSURE_CREATE: + case CLOSURE_CREATE: case CLOSURE_PARAM: case CLOSURE_CREATE_C: args++; @@ -462,7 +462,7 @@ block block_drop_unreferenced(block body) { jv block_take_imports(block* body) { jv imports = jv_array(); - + inst* top = NULL; if (body->first && body->first->op == TOP) { top = block_take(body); @@ -808,7 +808,7 @@ block gen_condbranch(block iftrue, block iffalse) { block gen_and(block a, block b) { // a and b = if a then (if b then true else false) else false - return BLOCK(gen_op_simple(DUP), a, + return BLOCK(gen_op_simple(DUP), a, gen_condbranch(BLOCK(gen_op_simple(POP), b, gen_condbranch(gen_const(jv_true()), @@ -870,7 +870,7 @@ static block gen_wildvar_binding(block var, const char* name, block body) { } block gen_cond(block cond, block iftrue, block iffalse) { - return BLOCK(gen_op_simple(DUP), cond, + return BLOCK(gen_op_simple(DUP), cond, gen_condbranch(BLOCK(gen_op_simple(POP), iftrue), BLOCK(gen_op_simple(POP), iffalse))); } @@ -988,7 +988,7 @@ static int expand_call_arglist(block* b) { // We expand the argument list as a series of instructions switch (curr->bound_by->op) { default: assert(0 && "Unknown function type"); break; - case CLOSURE_CREATE: + case CLOSURE_CREATE: case CLOSURE_PARAM: { block callargs = gen_noop(); for (inst* i; (i = block_take(&curr->arglist));) { @@ -1137,7 +1137,7 @@ static int compile(struct bytecode* bc, block b) { curr->bound_by->op == CLOSURE_PARAM); code[pos++] = (uint16_t)curr->imm.intval; code[pos++] = nesting_level(bc, curr->bound_by); - code[pos++] = curr->bound_by->imm.intval | + code[pos++] = curr->bound_by->imm.intval | (curr->bound_by->op == CLOSURE_CREATE ? ARG_NEWCLOSURE : 0); for (inst* arg = curr->arglist.first; arg; arg = arg->next) { assert(arg->op == CLOSURE_REF && arg->bound_by->op == CLOSURE_CREATE); diff --git a/exec_stack.h b/exec_stack.h index fa0ec79c..57e13650 100644 --- a/exec_stack.h +++ b/exec_stack.h @@ -81,7 +81,7 @@ static stack_ptr* stack_block_next(struct stack* s, stack_ptr p) { static void stack_reallocate(struct stack* s, size_t sz) { int old_mem_length = -(s->bound) + ALIGNMENT; char* old_mem_start = s->mem_end - old_mem_length; - + int new_mem_length = align_round_up((old_mem_length + sz + 256) * 2); char* new_mem_start = jv_mem_realloc(old_mem_start, new_mem_length); memmove(new_mem_start + (new_mem_length - old_mem_length), diff --git a/execute.c b/execute.c index 9437ac94..7295d72d 100644 --- a/execute.c +++ b/execute.c @@ -123,7 +123,7 @@ static struct closure make_closure(struct jq_state* jq, uint16_t* pc) { } } -static struct frame* frame_push(struct jq_state* jq, struct closure callee, +static struct frame* frame_push(struct jq_state* jq, struct closure callee, uint16_t* argdef, int nargs) { stack_ptr new_frame_idx = stack_push_block(&jq->stk, jq->curr_frame, frame_size(callee.bc)); struct frame* new_frame = stack_block(&jq->stk, new_frame_idx); @@ -208,7 +208,7 @@ void stack_save(jq_state *jq, uint16_t* retaddr, struct stack_pos sp){ struct forkpoint* fork = stack_block(&jq->stk, jq->fork_top); fork->saved_data_stack = jq->stk_top; fork->saved_curr_frame = jq->curr_frame; - fork->path_len = + fork->path_len = jv_get_kind(jq->path) == JV_KIND_ARRAY ? jv_array_length(jv_copy(jq->path)) : 0; fork->subexp_nest = jq->subexp_nest; fork->return_address = retaddr; @@ -397,7 +397,7 @@ jv jq_next(jq_state *jq) { stack_push(jq, b); break; } - + case POP: { jv_free(stack_pop(jq)); break; @@ -604,8 +604,8 @@ jv jq_next(jq_state *jq) { break; } - case EACH: - case EACH_OPT: + case EACH: + case EACH_OPT: stack_push(jq, jv_number(-1)); // fallthrough case ON_BACKTRACK(EACH): @@ -708,7 +708,7 @@ jv jq_next(jq_state *jq) { pc += offset; break; } - + case CALL_BUILTIN: { int nargs = *pc++; jv top = stack_pop(jq); @@ -733,7 +733,7 @@ jv jq_next(jq_state *jq) { // because the compiler should not generate this error. default: return jv_invalid_with_msg(jv_string("Function takes too many arguments")); } - + if (jv_is_valid(top)) { stack_push(jq, top); } else if (jv_invalid_has_msg(jv_copy(top))) { @@ -908,7 +908,7 @@ void jq_set_nomem_handler(jq_state *jq, void (*nomem_handler)(void *), void *dat void jq_start(jq_state *jq, jv input, int flags) { jv_nomem_handler(jq->nomem_handler, jq->nomem_handler_data); jq_reset(jq); - + struct closure top = {jq->bc, -1}; struct frame* top_frame = frame_push(jq, top, 0, 0); top_frame->retdata = 0; diff --git a/jq_test.c b/jq_test.c index 757b2416..2be745e3 100644 --- a/jq_test.c +++ b/jq_test.c @@ -199,7 +199,7 @@ static void jv_test() { assert(jv_get_kind(a) == JV_KIND_ARRAY); assert(jv_array_length(jv_copy(a)) == 0); assert(jv_array_length(jv_copy(a)) == 0); - + a = jv_array_append(a, jv_number(42)); assert(jv_array_length(jv_copy(a)) == 1); assert(jv_number_value(jv_array_get(jv_copy(a), 0)) == 42); @@ -300,13 +300,13 @@ static void jv_test() { jv_free(shortstr); jv_free(longstr); - + char a1s[] = "hello", a2s[] = "hello", bs[] = "goodbye"; jv a1 = jv_string(a1s), a2 = jv_string(a2s), b = jv_string(bs); assert(jv_equal(jv_copy(a1), jv_copy(a2))); assert(jv_equal(jv_copy(a2), jv_copy(a1))); assert(!jv_equal(jv_copy(a1), jv_copy(b))); - + assert(jv_string_hash(jv_copy(a1)) == jv_string_hash(jv_copy(a1))); assert(jv_string_hash(jv_copy(a1)) == jv_string_hash(jv_copy(a2))); assert(jv_string_hash(jv_copy(b)) != jv_string_hash(jv_copy(a1))); diff --git a/jv.c b/jv.c index 355b1506..40d1a869 100644 --- a/jv.c +++ b/jv.c @@ -84,7 +84,7 @@ jv jv_bool(int x) { /* * Invalid objects, with optional error messages - */ + */ typedef struct { jv_refcnt refcnt; @@ -248,7 +248,7 @@ static jv* jvp_array_write(jv* a, int i) { jvp_array* new_array = jvp_array_alloc(ARRAY_SIZE_ROUND_UP(new_length)); int j; for (j = 0; j < jvp_array_length(*a); j++) { - new_array->elements[j] = + new_array->elements[j] = jv_copy(array->elements[j + jvp_array_offset(*a)]); } for (; j < new_length; j++) { @@ -263,13 +263,13 @@ static jv* jvp_array_write(jv* a, int i) { } static int jvp_array_equal(jv a, jv b) { - if (jvp_array_length(a) != jvp_array_length(b)) + if (jvp_array_length(a) != jvp_array_length(b)) return 0; if (jvp_array_ptr(a) == jvp_array_ptr(b) && - jvp_array_offset(a) == jvp_array_offset(b)) + jvp_array_offset(a) == jvp_array_offset(b)) return 1; for (int i=0; i= len) { // the next string fits at the end of a @@ -542,7 +542,7 @@ static uint32_t rotl32 (uint32_t x, int8_t r){ static uint32_t jvp_string_hash(jv jstr) { jvp_string* str = jvp_string_ptr(jstr); - if (str->length_hashed & 1) + if (str->length_hashed & 1) return str->hash; /* The following is based on MurmurHash3. @@ -561,13 +561,13 @@ static uint32_t jvp_string_hash(jv jstr) { for(int i = -nblocks; i; i++) { uint32_t k1 = blocks[i]; //FIXME: endianness/alignment - + k1 *= c1; k1 = rotl32(k1,15); k1 *= c2; - + h1 ^= k1; - h1 = rotl32(h1,13); + h1 = rotl32(h1,13); h1 = h1*5+0xe6546b64; } @@ -611,7 +611,7 @@ static int jvp_string_equal(jv a, jv b) { jv jv_string_sized(const char* str, int len) { return - jvp_utf8_is_valid(str, str+len) ? + jvp_utf8_is_valid(str, str+len) ? jvp_string_new(str, len) : jvp_string_copy_replace_bad(str, len); } @@ -790,7 +790,7 @@ jv jv_string_slice(jv j, int start, int end) { } jv jv_string_concat(jv a, jv b) { - a = jvp_string_append(a, jv_string_value(b), + a = jvp_string_append(a, jv_string_value(b), jvp_string_length(jvp_string_ptr(b))); jv_free(b); return a; @@ -873,7 +873,7 @@ static jv jvp_object_new(int size) { // size must be a power of two assert(size > 0 && (size & (size - 1)) == 0); - jvp_object* obj = jv_mem_alloc(sizeof(jvp_object) + + jvp_object* obj = jv_mem_alloc(sizeof(jvp_object) + sizeof(struct object_slot) * size + sizeof(int) * (size * 2)); obj->refcnt.count = 1; @@ -927,8 +927,8 @@ static struct object_slot* jvp_object_next_slot(jv object, struct object_slot* s static struct object_slot* jvp_object_find_slot(jv object, jv keystr, int* bucket) { uint32_t hash = jvp_string_hash(keystr); - for (struct object_slot* curr = jvp_object_get_slot(object, *bucket); - curr; + for (struct object_slot* curr = jvp_object_get_slot(object, *bucket); + curr; curr = jvp_object_next_slot(object, curr)) { if (curr->hash == hash && jvp_string_equal(keystr, curr->string)) { return curr; @@ -1046,8 +1046,8 @@ static int jvp_object_delete(jv* object, jv key) { int* bucket = jvp_object_find_bucket(*object, key); int* prev_ptr = bucket; uint32_t hash = jvp_string_hash(key); - for (struct object_slot* curr = jvp_object_get_slot(*object, *bucket); - curr; + for (struct object_slot* curr = jvp_object_get_slot(*object, *bucket); + curr; curr = jvp_object_next_slot(*object, curr)) { if (hash == curr->hash && jvp_string_equal(key, curr->string)) { *prev_ptr = curr->next; @@ -1201,7 +1201,7 @@ int jv_object_iter_next(jv object, int iter) { struct object_slot* slot; do { iter++; - if (iter >= jvp_object_size(object)) + if (iter >= jvp_object_size(object)) return ITER_FINISHED; slot = jvp_object_get_slot(object, iter); } while (jv_get_kind(slot->string) == JV_KIND_NULL); @@ -1224,8 +1224,8 @@ jv jv_object_iter_value(jv object, int iter) { * Memory management */ jv jv_copy(jv j) { - if (jv_get_kind(j) == JV_KIND_ARRAY || - jv_get_kind(j) == JV_KIND_STRING || + if (jv_get_kind(j) == JV_KIND_ARRAY || + jv_get_kind(j) == JV_KIND_STRING || jv_get_kind(j) == JV_KIND_OBJECT || (jv_get_kind(j) == JV_KIND_INVALID && j.u.ptr != 0)) { jvp_refcnt_inc(j.u.ptr); diff --git a/jv.h b/jv.h index 98ac5e0f..05cb61f8 100644 --- a/jv.h +++ b/jv.h @@ -154,7 +154,7 @@ jv jv_object_iter_value(jv, int); #define JV_OBJECT_IDX(_1,_2,_3,_4,_5,_6,_7,_8,NAME,...) NAME #define JV_OBJECT(...) \ JV_OBJECT_IDX(__VA_ARGS__, JV_OBJECT_8, JV_OBJECT_7, JV_OBJECT_6, JV_OBJECT_5, JV_OBJECT_4, JV_OBJECT_3, JV_OBJECT_2, JV_OBJECT_1)(__VA_ARGS__) - + int jv_get_refcnt(jv); diff --git a/jv_aux.c b/jv_aux.c index 7bc35cb7..1d2a325a 100644 --- a/jv_aux.c +++ b/jv_aux.c @@ -88,9 +88,9 @@ jv jv_get(jv t, jv k) { } } else if (jv_get_kind(t) == JV_KIND_ARRAY && jv_get_kind(k) == JV_KIND_ARRAY) { v = jv_array_indexes(t, k); - } else if (jv_get_kind(t) == JV_KIND_NULL && - (jv_get_kind(k) == JV_KIND_STRING || - jv_get_kind(k) == JV_KIND_NUMBER || + } else if (jv_get_kind(t) == JV_KIND_NULL && + (jv_get_kind(k) == JV_KIND_STRING || + jv_get_kind(k) == JV_KIND_NUMBER || jv_get_kind(k) == JV_KIND_OBJECT)) { jv_free(t); jv_free(k); @@ -123,7 +123,7 @@ jv jv_set(jv t, jv k, jv v) { return v; } int isnull = jv_get_kind(t) == JV_KIND_NULL; - if (jv_get_kind(k) == JV_KIND_STRING && + if (jv_get_kind(k) == JV_KIND_STRING && (jv_get_kind(t) == JV_KIND_OBJECT || isnull)) { if (isnull) t = jv_object(); t = jv_object_set(t, k, v); @@ -214,7 +214,7 @@ jv jv_has(jv t, jv k) { jv jv_dels(jv t, jv keys) { assert(jv_get_kind(keys) == JV_KIND_ARRAY); assert(jv_is_valid(t)); - + if (jv_get_kind(t) == JV_KIND_NULL || jv_array_length(jv_copy(keys)) == 0) { // no change } else if (jv_get_kind(t) == JV_KIND_ARRAY) { @@ -285,7 +285,7 @@ jv jv_dels(jv t, jv keys) { jv_free(k); break; } - t = jv_object_delete(t, k); + t = jv_object_delete(t, k); } } else { jv err = jv_invalid_with_msg(jv_string_fmt("Cannot delete fields from %s", @@ -316,7 +316,7 @@ jv jv_setpath(jv root, jv path, jv value) { } jv pathcurr = jv_array_get(jv_copy(path), 0); jv pathrest = jv_array_slice(path, 1, jv_array_length(jv_copy(path))); - return jv_set(root, pathcurr, + return jv_set(root, pathcurr, jv_setpath(jv_get(jv_copy(root), jv_copy(pathcurr)), pathrest, value)); } @@ -382,7 +382,7 @@ static jv delpaths_sorted(jv object, jv paths, int start) { jv_free(paths); if (jv_is_valid(object)) object = jv_dels(object, delkeys); - else + else jv_free(delkeys); return object; } @@ -488,7 +488,7 @@ int jv_cmp(jv a, jv b) { case JV_KIND_NUMBER: { double da = jv_number_value(a), db = jv_number_value(b); - + // handle NaN as though it were null if (da != da) r = jv_cmp(jv_null(), jv_number(db)); else if (db != db) r = jv_cmp(jv_number(da), jv_null()); diff --git a/jv_dtoa.c b/jv_dtoa.c index 4de92e43..187a9d2d 100644 --- a/jv_dtoa.c +++ b/jv_dtoa.c @@ -525,7 +525,7 @@ void jvp_dtoa_context_init(struct dtoa_context* C) { } C->p5s = 0; } - + static Bigint * Balloc(struct dtoa_context* C, int k) { diff --git a/jv_parse.c b/jv_parse.c index 63d53949..3102ed4f 100644 --- a/jv_parse.c +++ b/jv_parse.c @@ -43,13 +43,13 @@ struct jv_parser { enum last_seen last_seen; // streamer jv output; // streamer jv next; // both - + char* tokenbuf; int tokenpos; int tokenlen; int line, column; - + struct dtoa_context dtoa; enum { @@ -102,7 +102,7 @@ static void parser_reset(struct jv_parser* p) { p->output = jv_invalid(); jv_free(p->next); p->next = jv_invalid(); - for (int i=0; istackpos; i++) + for (int i=0; istackpos; i++) jv_free(p->stack[i]); p->stackpos = 0; p->tokenpos = 0; @@ -157,7 +157,7 @@ static pfunc parse_token(struct jv_parser* p, char ch) { break; case ':': - if (!jv_is_valid(p->next)) + if (!jv_is_valid(p->next)) return "Expected string key before ':'"; if (p->stackpos == 0 || jv_get_kind(p->stack[p->stackpos-1]) != JV_KIND_OBJECT) return "':' not as part of an object"; @@ -177,7 +177,7 @@ static pfunc parse_token(struct jv_parser* p, char ch) { p->next = jv_invalid(); } else if (jv_get_kind(p->stack[p->stackpos-1]) == JV_KIND_STRING) { assert(p->stackpos > 1 && jv_get_kind(p->stack[p->stackpos-2]) == JV_KIND_OBJECT); - p->stack[p->stackpos-2] = jv_object_set(p->stack[p->stackpos-2], + p->stack[p->stackpos-2] = jv_object_set(p->stack[p->stackpos-2], p->stack[p->stackpos-1], p->next); p->stackpos--; p->next = jv_invalid(); @@ -210,7 +210,7 @@ static pfunc parse_token(struct jv_parser* p, char ch) { if (jv_get_kind(p->stack[p->stackpos-1]) != JV_KIND_STRING) return "Objects must consist of key:value pairs"; assert(p->stackpos > 1 && jv_get_kind(p->stack[p->stackpos-2]) == JV_KIND_OBJECT); - p->stack[p->stackpos-2] = jv_object_set(p->stack[p->stackpos-2], + p->stack[p->stackpos-2] = jv_object_set(p->stack[p->stackpos-2], p->stack[p->stackpos-1], p->next); p->stackpos--; p->next = jv_invalid(); @@ -410,7 +410,7 @@ static pfunc found_string(struct jv_parser* p) { char* in = p->tokenbuf; char* out = p->tokenbuf; char* end = p->tokenbuf + p->tokenpos; - + while (in < end) { char c = *in++; if (c == '\\') { @@ -479,7 +479,7 @@ static pfunc check_literal(struct jv_parser* p) { } if (pattern) { if (p->tokenpos != plen) return "Invalid literal"; - for (int i=0; itokenbuf[i] != pattern[i]) return "Invalid literal"; TRY(value(p, v)); diff --git a/jv_print.c b/jv_print.c index 227de1f1..b16bf269 100644 --- a/jv_print.c +++ b/jv_print.c @@ -19,7 +19,7 @@ // Colour table. See http://en.wikipedia.org/wiki/ANSI_escape_code#Colors // for how to choose these. -static const jv_kind colour_kinds[] = +static const jv_kind colour_kinds[] = {JV_KIND_NULL, JV_KIND_FALSE, JV_KIND_TRUE, JV_KIND_NUMBER, JV_KIND_STRING, JV_KIND_ARRAY, JV_KIND_OBJECT}; static const char* const colours[] = @@ -118,7 +118,7 @@ static void jvp_dump_string(jv str, int ascii_only, FILE* F, jv* S, int T) { sprintf(buf, "\\u%04x", c); } else { c -= 0x10000; - sprintf(buf, "\\u%04x\\u%04x", + sprintf(buf, "\\u%04x\\u%04x", 0xD800 | ((c & 0xffc00) >> 10), 0xDC00 | (c & 0x003ff)); } @@ -283,7 +283,7 @@ static void jv_dump_term(struct dtoa_context* C, jv x, int flags, int indent, FI if (colour) put_str(colour, F, S, flags & JV_PRINT_ISATTY); put_str((flags & JV_PRINT_PRETTY) ? ": " : ":", F, S, flags & JV_PRINT_ISATTY); if (colour) put_str(COLRESET, F, S, flags & JV_PRINT_ISATTY); - + jv_dump_term(C, value, flags, indent + 1, F, S); if (colour) put_str(colour, F, S, flags & JV_PRINT_ISATTY); } diff --git a/parser.c b/parser.c index c210a758..8bd8bd05 100644 --- a/parser.c +++ b/parser.c @@ -119,9 +119,8 @@ struct lexer_param; (Loc).end = YYRHSLOC(Rhs, 0).end; \ } \ } while (0) - -#line 125 "parser.c" /* yacc.c:355 */ +#line 124 "parser.c" /* yacc.c:355 */ /* Token type. */ #ifndef YYTOKENTYPE @@ -226,7 +225,7 @@ union YYSTYPE jv literal; block blk; -#line 230 "parser.c" /* yacc.c:355 */ +#line 229 "parser.c" /* yacc.c:355 */ }; # define YYSTYPE_IS_TRIVIAL 1 # define YYSTYPE_IS_DECLARED 1 @@ -266,7 +265,7 @@ struct lexer_param { /*YYERROR*/; \ } while (0) -void yyerror(YYLTYPE* loc, block* answer, int* errors, +void yyerror(YYLTYPE* loc, block* answer, int* errors, struct locfile* locations, struct lexer_param* lexer_param_ptr, const char *s){ (*errors)++; if (strstr(s, "unexpected")) { @@ -280,7 +279,7 @@ void yyerror(YYLTYPE* loc, block* answer, int* errors, } } -int yylex(YYSTYPE* yylval, YYLTYPE* yylloc, block* answer, int* errors, +int yylex(YYSTYPE* yylval, YYLTYPE* yylloc, block* answer, int* errors, struct locfile* locations, struct lexer_param* lexer_param_ptr) { yyscan_t lexer = lexer_param_ptr->lexer; int tok = jq_yylex(yylval, yylloc, lexer); @@ -393,23 +392,23 @@ static block gen_definedor_assign(block object, block val) { return BLOCK(gen_op_simple(DUP), val, tmp, gen_call("_modify", BLOCK(gen_lambda(object), - gen_lambda(gen_definedor(gen_noop(), + gen_lambda(gen_definedor(gen_noop(), gen_op_bound(LOADV, tmp)))))); } - + static block gen_update(block object, block val, int optype) { block tmp = gen_op_var_fresh(STOREV, "tmp"); return BLOCK(gen_op_simple(DUP), val, tmp, - gen_call("_modify", BLOCK(gen_lambda(object), + gen_call("_modify", BLOCK(gen_lambda(object), gen_lambda(gen_binop(gen_noop(), gen_op_bound(LOADV, tmp), optype))))); } -#line 413 "parser.c" /* yacc.c:358 */ +#line 412 "parser.c" /* yacc.c:358 */ #ifdef short # undef short @@ -1864,163 +1863,163 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocatio case 4: /* IDENT */ #line 36 "parser.y" /* yacc.c:1257 */ { jv_free(((*yyvaluep).literal)); } -#line 1868 "parser.c" /* yacc.c:1257 */ +#line 1867 "parser.c" /* yacc.c:1257 */ break; case 5: /* FIELD */ #line 36 "parser.y" /* yacc.c:1257 */ { jv_free(((*yyvaluep).literal)); } -#line 1874 "parser.c" /* yacc.c:1257 */ +#line 1873 "parser.c" /* yacc.c:1257 */ break; case 6: /* LITERAL */ #line 36 "parser.y" /* yacc.c:1257 */ { jv_free(((*yyvaluep).literal)); } -#line 1880 "parser.c" /* yacc.c:1257 */ +#line 1879 "parser.c" /* yacc.c:1257 */ break; case 7: /* FORMAT */ #line 36 "parser.y" /* yacc.c:1257 */ { jv_free(((*yyvaluep).literal)); } -#line 1886 "parser.c" /* yacc.c:1257 */ +#line 1885 "parser.c" /* yacc.c:1257 */ break; case 41: /* QQSTRING_TEXT */ #line 36 "parser.y" /* yacc.c:1257 */ { jv_free(((*yyvaluep).literal)); } -#line 1892 "parser.c" /* yacc.c:1257 */ +#line 1891 "parser.c" /* yacc.c:1257 */ break; case 68: /* Module */ #line 37 "parser.y" /* yacc.c:1257 */ { block_free(((*yyvaluep).blk)); } -#line 1898 "parser.c" /* yacc.c:1257 */ +#line 1897 "parser.c" /* yacc.c:1257 */ break; case 69: /* Imports */ #line 37 "parser.y" /* yacc.c:1257 */ { block_free(((*yyvaluep).blk)); } -#line 1904 "parser.c" /* yacc.c:1257 */ +#line 1903 "parser.c" /* yacc.c:1257 */ break; case 70: /* FuncDefs */ #line 37 "parser.y" /* yacc.c:1257 */ { block_free(((*yyvaluep).blk)); } -#line 1910 "parser.c" /* yacc.c:1257 */ +#line 1909 "parser.c" /* yacc.c:1257 */ break; case 71: /* Exp */ #line 37 "parser.y" /* yacc.c:1257 */ { block_free(((*yyvaluep).blk)); } -#line 1916 "parser.c" /* yacc.c:1257 */ +#line 1915 "parser.c" /* yacc.c:1257 */ break; case 72: /* Import */ #line 37 "parser.y" /* yacc.c:1257 */ { block_free(((*yyvaluep).blk)); } -#line 1922 "parser.c" /* yacc.c:1257 */ +#line 1921 "parser.c" /* yacc.c:1257 */ break; case 73: /* FuncDef */ #line 37 "parser.y" /* yacc.c:1257 */ { block_free(((*yyvaluep).blk)); } -#line 1928 "parser.c" /* yacc.c:1257 */ +#line 1927 "parser.c" /* yacc.c:1257 */ break; case 74: /* Params */ #line 37 "parser.y" /* yacc.c:1257 */ { block_free(((*yyvaluep).blk)); } -#line 1934 "parser.c" /* yacc.c:1257 */ +#line 1933 "parser.c" /* yacc.c:1257 */ break; case 75: /* Param */ #line 37 "parser.y" /* yacc.c:1257 */ { block_free(((*yyvaluep).blk)); } -#line 1940 "parser.c" /* yacc.c:1257 */ +#line 1939 "parser.c" /* yacc.c:1257 */ break; case 76: /* String */ #line 37 "parser.y" /* yacc.c:1257 */ { block_free(((*yyvaluep).blk)); } -#line 1946 "parser.c" /* yacc.c:1257 */ +#line 1945 "parser.c" /* yacc.c:1257 */ break; case 79: /* QQString */ #line 37 "parser.y" /* yacc.c:1257 */ { block_free(((*yyvaluep).blk)); } -#line 1952 "parser.c" /* yacc.c:1257 */ +#line 1951 "parser.c" /* yacc.c:1257 */ break; case 80: /* ElseBody */ #line 37 "parser.y" /* yacc.c:1257 */ { block_free(((*yyvaluep).blk)); } -#line 1958 "parser.c" /* yacc.c:1257 */ +#line 1957 "parser.c" /* yacc.c:1257 */ break; case 81: /* ExpD */ #line 37 "parser.y" /* yacc.c:1257 */ { block_free(((*yyvaluep).blk)); } -#line 1964 "parser.c" /* yacc.c:1257 */ +#line 1963 "parser.c" /* yacc.c:1257 */ break; case 82: /* Term */ #line 37 "parser.y" /* yacc.c:1257 */ { block_free(((*yyvaluep).blk)); } -#line 1970 "parser.c" /* yacc.c:1257 */ +#line 1969 "parser.c" /* yacc.c:1257 */ break; case 83: /* Args */ #line 37 "parser.y" /* yacc.c:1257 */ { block_free(((*yyvaluep).blk)); } -#line 1976 "parser.c" /* yacc.c:1257 */ +#line 1975 "parser.c" /* yacc.c:1257 */ break; case 84: /* Arg */ #line 37 "parser.y" /* yacc.c:1257 */ { block_free(((*yyvaluep).blk)); } -#line 1982 "parser.c" /* yacc.c:1257 */ +#line 1981 "parser.c" /* yacc.c:1257 */ break; case 85: /* Pattern */ #line 37 "parser.y" /* yacc.c:1257 */ { block_free(((*yyvaluep).blk)); } -#line 1988 "parser.c" /* yacc.c:1257 */ +#line 1987 "parser.c" /* yacc.c:1257 */ break; case 86: /* ArrayPats */ #line 37 "parser.y" /* yacc.c:1257 */ { block_free(((*yyvaluep).blk)); } -#line 1994 "parser.c" /* yacc.c:1257 */ +#line 1993 "parser.c" /* yacc.c:1257 */ break; case 87: /* ObjPats */ #line 37 "parser.y" /* yacc.c:1257 */ { block_free(((*yyvaluep).blk)); } -#line 2000 "parser.c" /* yacc.c:1257 */ +#line 1999 "parser.c" /* yacc.c:1257 */ break; case 88: /* ObjPat */ #line 37 "parser.y" /* yacc.c:1257 */ { block_free(((*yyvaluep).blk)); } -#line 2006 "parser.c" /* yacc.c:1257 */ +#line 2005 "parser.c" /* yacc.c:1257 */ break; case 89: /* Keyword */ #line 36 "parser.y" /* yacc.c:1257 */ { jv_free(((*yyvaluep).literal)); } -#line 2012 "parser.c" /* yacc.c:1257 */ +#line 2011 "parser.c" /* yacc.c:1257 */ break; case 90: /* MkDict */ #line 37 "parser.y" /* yacc.c:1257 */ { block_free(((*yyvaluep).blk)); } -#line 2018 "parser.c" /* yacc.c:1257 */ +#line 2017 "parser.c" /* yacc.c:1257 */ break; case 91: /* MkDictPair */ #line 37 "parser.y" /* yacc.c:1257 */ { block_free(((*yyvaluep).blk)); } -#line 2024 "parser.c" /* yacc.c:1257 */ +#line 2023 "parser.c" /* yacc.c:1257 */ break; @@ -2316,7 +2315,7 @@ yyreduce: { *answer = BLOCK((yyvsp[-2].blk), (yyvsp[-1].blk), gen_op_simple(TOP), (yyvsp[0].blk)); } -#line 2320 "parser.c" /* yacc.c:1646 */ +#line 2319 "parser.c" /* yacc.c:1646 */ break; case 3: @@ -2324,7 +2323,7 @@ yyreduce: { *answer = BLOCK((yyvsp[-2].blk), (yyvsp[-1].blk), (yyvsp[0].blk)); } -#line 2328 "parser.c" /* yacc.c:1646 */ +#line 2327 "parser.c" /* yacc.c:1646 */ break; case 4: @@ -2332,7 +2331,7 @@ yyreduce: { (yyval.blk) = gen_noop(); } -#line 2336 "parser.c" /* yacc.c:1646 */ +#line 2335 "parser.c" /* yacc.c:1646 */ break; case 5: @@ -2345,7 +2344,7 @@ yyreduce: (yyval.blk) = gen_module((yyvsp[-1].blk)); } } -#line 2349 "parser.c" /* yacc.c:1646 */ +#line 2348 "parser.c" /* yacc.c:1646 */ break; case 6: @@ -2353,7 +2352,7 @@ yyreduce: { (yyval.blk) = gen_noop(); } -#line 2357 "parser.c" /* yacc.c:1646 */ +#line 2356 "parser.c" /* yacc.c:1646 */ break; case 7: @@ -2361,7 +2360,7 @@ yyreduce: { (yyval.blk) = BLOCK((yyvsp[-1].blk), (yyvsp[0].blk)); } -#line 2365 "parser.c" /* yacc.c:1646 */ +#line 2364 "parser.c" /* yacc.c:1646 */ break; case 8: @@ -2369,7 +2368,7 @@ yyreduce: { (yyval.blk) = gen_noop(); } -#line 2373 "parser.c" /* yacc.c:1646 */ +#line 2372 "parser.c" /* yacc.c:1646 */ break; case 9: @@ -2377,7 +2376,7 @@ yyreduce: { (yyval.blk) = block_bind((yyvsp[-1].blk), (yyvsp[0].blk), OP_IS_CALL_PSEUDO); } -#line 2381 "parser.c" /* yacc.c:1646 */ +#line 2380 "parser.c" /* yacc.c:1646 */ break; case 10: @@ -2385,7 +2384,7 @@ yyreduce: { (yyval.blk) = block_bind_referenced((yyvsp[-1].blk), (yyvsp[0].blk), OP_IS_CALL_PSEUDO); } -#line 2389 "parser.c" /* yacc.c:1646 */ +#line 2388 "parser.c" /* yacc.c:1646 */ break; case 11: @@ -2393,7 +2392,7 @@ yyreduce: { (yyval.blk) = gen_destructure((yyvsp[-4].blk), (yyvsp[-2].blk), (yyvsp[0].blk)); } -#line 2397 "parser.c" /* yacc.c:1646 */ +#line 2396 "parser.c" /* yacc.c:1646 */ break; case 12: @@ -2401,7 +2400,7 @@ yyreduce: { (yyval.blk) = gen_reduce((yyvsp[-7].blk), (yyvsp[-5].blk), (yyvsp[-3].blk), (yyvsp[-1].blk)); } -#line 2405 "parser.c" /* yacc.c:1646 */ +#line 2404 "parser.c" /* yacc.c:1646 */ break; case 13: @@ -2409,7 +2408,7 @@ yyreduce: { (yyval.blk) = gen_foreach((yyvsp[-9].blk), (yyvsp[-7].blk), (yyvsp[-5].blk), (yyvsp[-3].blk), (yyvsp[-1].blk)); } -#line 2413 "parser.c" /* yacc.c:1646 */ +#line 2412 "parser.c" /* yacc.c:1646 */ break; case 14: @@ -2417,7 +2416,7 @@ yyreduce: { (yyval.blk) = gen_foreach((yyvsp[-7].blk), (yyvsp[-5].blk), (yyvsp[-3].blk), (yyvsp[-1].blk), gen_noop()); } -#line 2421 "parser.c" /* yacc.c:1646 */ +#line 2420 "parser.c" /* yacc.c:1646 */ break; case 15: @@ -2425,7 +2424,7 @@ yyreduce: { (yyval.blk) = gen_cond((yyvsp[-3].blk), (yyvsp[-1].blk), (yyvsp[0].blk)); } -#line 2429 "parser.c" /* yacc.c:1646 */ +#line 2428 "parser.c" /* yacc.c:1646 */ break; case 16: @@ -2434,7 +2433,7 @@ yyreduce: FAIL((yyloc), "Possibly unterminated 'if' statement"); (yyval.blk) = (yyvsp[-2].blk); } -#line 2438 "parser.c" /* yacc.c:1646 */ +#line 2437 "parser.c" /* yacc.c:1646 */ break; case 17: @@ -2443,7 +2442,7 @@ yyreduce: //$$ = BLOCK(gen_op_target(FORK_OPT, $2), $2, $4); (yyval.blk) = gen_try((yyvsp[-2].blk), gen_try_handler((yyvsp[0].blk))); } -#line 2447 "parser.c" /* yacc.c:1646 */ +#line 2446 "parser.c" /* yacc.c:1646 */ break; case 18: @@ -2452,7 +2451,7 @@ yyreduce: //$$ = BLOCK(gen_op_target(FORK_OPT, $2), $2, gen_op_simple(BACKTRACK)); (yyval.blk) = gen_try((yyvsp[0].blk), gen_op_simple(BACKTRACK)); } -#line 2456 "parser.c" /* yacc.c:1646 */ +#line 2455 "parser.c" /* yacc.c:1646 */ break; case 19: @@ -2461,7 +2460,7 @@ yyreduce: FAIL((yyloc), "Possibly unterminated 'try' statement"); (yyval.blk) = (yyvsp[-2].blk); } -#line 2465 "parser.c" /* yacc.c:1646 */ +#line 2464 "parser.c" /* yacc.c:1646 */ break; case 20: @@ -2472,7 +2471,7 @@ yyreduce: jv_free((yyvsp[-2].literal)); jv_free(v); } -#line 2476 "parser.c" /* yacc.c:1646 */ +#line 2475 "parser.c" /* yacc.c:1646 */ break; case 21: @@ -2480,7 +2479,7 @@ yyreduce: { (yyval.blk) = gen_try((yyvsp[-1].blk), gen_op_simple(BACKTRACK)); } -#line 2484 "parser.c" /* yacc.c:1646 */ +#line 2483 "parser.c" /* yacc.c:1646 */ break; case 22: @@ -2488,7 +2487,7 @@ yyreduce: { (yyval.blk) = gen_call("_assign", BLOCK(gen_lambda((yyvsp[-2].blk)), gen_lambda((yyvsp[0].blk)))); } -#line 2492 "parser.c" /* yacc.c:1646 */ +#line 2491 "parser.c" /* yacc.c:1646 */ break; case 23: @@ -2496,7 +2495,7 @@ yyreduce: { (yyval.blk) = gen_or((yyvsp[-2].blk), (yyvsp[0].blk)); } -#line 2500 "parser.c" /* yacc.c:1646 */ +#line 2499 "parser.c" /* yacc.c:1646 */ break; case 24: @@ -2504,7 +2503,7 @@ yyreduce: { (yyval.blk) = gen_and((yyvsp[-2].blk), (yyvsp[0].blk)); } -#line 2508 "parser.c" /* yacc.c:1646 */ +#line 2507 "parser.c" /* yacc.c:1646 */ break; case 25: @@ -2512,7 +2511,7 @@ yyreduce: { (yyval.blk) = gen_definedor((yyvsp[-2].blk), (yyvsp[0].blk)); } -#line 2516 "parser.c" /* yacc.c:1646 */ +#line 2515 "parser.c" /* yacc.c:1646 */ break; case 26: @@ -2520,7 +2519,7 @@ yyreduce: { (yyval.blk) = gen_definedor_assign((yyvsp[-2].blk), (yyvsp[0].blk)); } -#line 2524 "parser.c" /* yacc.c:1646 */ +#line 2523 "parser.c" /* yacc.c:1646 */ break; case 27: @@ -2528,23 +2527,23 @@ yyreduce: { (yyval.blk) = gen_call("_modify", BLOCK(gen_lambda((yyvsp[-2].blk)), gen_lambda((yyvsp[0].blk)))); } -#line 2532 "parser.c" /* yacc.c:1646 */ +#line 2531 "parser.c" /* yacc.c:1646 */ break; case 28: #line 390 "parser.y" /* yacc.c:1646 */ - { - (yyval.blk) = block_join((yyvsp[-2].blk), (yyvsp[0].blk)); + { + (yyval.blk) = block_join((yyvsp[-2].blk), (yyvsp[0].blk)); } -#line 2540 "parser.c" /* yacc.c:1646 */ +#line 2539 "parser.c" /* yacc.c:1646 */ break; case 29: #line 394 "parser.y" /* yacc.c:1646 */ - { - (yyval.blk) = gen_both((yyvsp[-2].blk), (yyvsp[0].blk)); + { + (yyval.blk) = gen_both((yyvsp[-2].blk), (yyvsp[0].blk)); } -#line 2548 "parser.c" /* yacc.c:1646 */ +#line 2547 "parser.c" /* yacc.c:1646 */ break; case 30: @@ -2552,7 +2551,7 @@ yyreduce: { (yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), '+'); } -#line 2556 "parser.c" /* yacc.c:1646 */ +#line 2555 "parser.c" /* yacc.c:1646 */ break; case 31: @@ -2560,7 +2559,7 @@ yyreduce: { (yyval.blk) = gen_update((yyvsp[-2].blk), (yyvsp[0].blk), '+'); } -#line 2564 "parser.c" /* yacc.c:1646 */ +#line 2563 "parser.c" /* yacc.c:1646 */ break; case 32: @@ -2568,7 +2567,7 @@ yyreduce: { (yyval.blk) = BLOCK((yyvsp[0].blk), gen_call("_negate", gen_noop())); } -#line 2572 "parser.c" /* yacc.c:1646 */ +#line 2571 "parser.c" /* yacc.c:1646 */ break; case 33: @@ -2576,7 +2575,7 @@ yyreduce: { (yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), '-'); } -#line 2580 "parser.c" /* yacc.c:1646 */ +#line 2579 "parser.c" /* yacc.c:1646 */ break; case 34: @@ -2584,7 +2583,7 @@ yyreduce: { (yyval.blk) = gen_update((yyvsp[-2].blk), (yyvsp[0].blk), '-'); } -#line 2588 "parser.c" /* yacc.c:1646 */ +#line 2587 "parser.c" /* yacc.c:1646 */ break; case 35: @@ -2592,7 +2591,7 @@ yyreduce: { (yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), '*'); } -#line 2596 "parser.c" /* yacc.c:1646 */ +#line 2595 "parser.c" /* yacc.c:1646 */ break; case 36: @@ -2600,7 +2599,7 @@ yyreduce: { (yyval.blk) = gen_update((yyvsp[-2].blk), (yyvsp[0].blk), '*'); } -#line 2604 "parser.c" /* yacc.c:1646 */ +#line 2603 "parser.c" /* yacc.c:1646 */ break; case 37: @@ -2610,7 +2609,7 @@ yyreduce: if (block_is_const_inf((yyval.blk))) FAIL((yyloc), "Division by zero?"); } -#line 2614 "parser.c" /* yacc.c:1646 */ +#line 2613 "parser.c" /* yacc.c:1646 */ break; case 38: @@ -2620,7 +2619,7 @@ yyreduce: if (block_is_const_inf((yyval.blk))) FAIL((yyloc), "Remainder by zero?"); } -#line 2624 "parser.c" /* yacc.c:1646 */ +#line 2623 "parser.c" /* yacc.c:1646 */ break; case 39: @@ -2628,7 +2627,7 @@ yyreduce: { (yyval.blk) = gen_update((yyvsp[-2].blk), (yyvsp[0].blk), '/'); } -#line 2632 "parser.c" /* yacc.c:1646 */ +#line 2631 "parser.c" /* yacc.c:1646 */ break; case 40: @@ -2636,7 +2635,7 @@ yyreduce: { (yyval.blk) = gen_update((yyvsp[-2].blk), (yyvsp[0].blk), '%'); } -#line 2640 "parser.c" /* yacc.c:1646 */ +#line 2639 "parser.c" /* yacc.c:1646 */ break; case 41: @@ -2644,7 +2643,7 @@ yyreduce: { (yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), EQ); } -#line 2648 "parser.c" /* yacc.c:1646 */ +#line 2647 "parser.c" /* yacc.c:1646 */ break; case 42: @@ -2652,7 +2651,7 @@ yyreduce: { (yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), NEQ); } -#line 2656 "parser.c" /* yacc.c:1646 */ +#line 2655 "parser.c" /* yacc.c:1646 */ break; case 43: @@ -2660,7 +2659,7 @@ yyreduce: { (yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), '<'); } -#line 2664 "parser.c" /* yacc.c:1646 */ +#line 2663 "parser.c" /* yacc.c:1646 */ break; case 44: @@ -2668,7 +2667,7 @@ yyreduce: { (yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), '>'); } -#line 2672 "parser.c" /* yacc.c:1646 */ +#line 2671 "parser.c" /* yacc.c:1646 */ break; case 45: @@ -2676,7 +2675,7 @@ yyreduce: { (yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), LESSEQ); } -#line 2680 "parser.c" /* yacc.c:1646 */ +#line 2679 "parser.c" /* yacc.c:1646 */ break; case 46: @@ -2684,15 +2683,15 @@ yyreduce: { (yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), GREATEREQ); } -#line 2688 "parser.c" /* yacc.c:1646 */ +#line 2687 "parser.c" /* yacc.c:1646 */ break; case 47: #line 470 "parser.y" /* yacc.c:1646 */ - { - (yyval.blk) = (yyvsp[0].blk); + { + (yyval.blk) = (yyvsp[0].blk); } -#line 2696 "parser.c" /* yacc.c:1646 */ +#line 2695 "parser.c" /* yacc.c:1646 */ break; case 48: @@ -2706,7 +2705,7 @@ yyreduce: jv_free((yyvsp[-1].literal)); jv_free(v); } -#line 2710 "parser.c" /* yacc.c:1646 */ +#line 2709 "parser.c" /* yacc.c:1646 */ break; case 49: @@ -2718,7 +2717,7 @@ yyreduce: jv_free((yyvsp[-1].literal)); jv_free(v); } -#line 2722 "parser.c" /* yacc.c:1646 */ +#line 2721 "parser.c" /* yacc.c:1646 */ break; case 50: @@ -2729,7 +2728,7 @@ yyreduce: block_free((yyvsp[-1].blk)); jv_free(v); } -#line 2733 "parser.c" /* yacc.c:1646 */ +#line 2732 "parser.c" /* yacc.c:1646 */ break; case 51: @@ -2746,7 +2745,7 @@ yyreduce: block_free((yyvsp[-4].blk)); jv_free((yyvsp[-2].literal)); } -#line 2750 "parser.c" /* yacc.c:1646 */ +#line 2749 "parser.c" /* yacc.c:1646 */ break; case 52: @@ -2762,7 +2761,7 @@ yyreduce: } block_free((yyvsp[-2].blk)); } -#line 2766 "parser.c" /* yacc.c:1646 */ +#line 2765 "parser.c" /* yacc.c:1646 */ break; case 53: @@ -2779,7 +2778,7 @@ yyreduce: block_free((yyvsp[-5].blk)); jv_free((yyvsp[-2].literal)); } -#line 2783 "parser.c" /* yacc.c:1646 */ +#line 2782 "parser.c" /* yacc.c:1646 */ break; case 54: @@ -2788,7 +2787,7 @@ yyreduce: (yyval.blk) = gen_function(jv_string_value((yyvsp[-3].literal)), gen_noop(), (yyvsp[-1].blk)); jv_free((yyvsp[-3].literal)); } -#line 2792 "parser.c" /* yacc.c:1646 */ +#line 2791 "parser.c" /* yacc.c:1646 */ break; case 55: @@ -2797,7 +2796,7 @@ yyreduce: (yyval.blk) = gen_function(jv_string_value((yyvsp[-6].literal)), (yyvsp[-4].blk), (yyvsp[-1].blk)); jv_free((yyvsp[-6].literal)); } -#line 2801 "parser.c" /* yacc.c:1646 */ +#line 2800 "parser.c" /* yacc.c:1646 */ break; case 56: @@ -2805,7 +2804,7 @@ yyreduce: { (yyval.blk) = (yyvsp[0].blk); } -#line 2809 "parser.c" /* yacc.c:1646 */ +#line 2808 "parser.c" /* yacc.c:1646 */ break; case 57: @@ -2813,7 +2812,7 @@ yyreduce: { (yyval.blk) = BLOCK((yyvsp[-2].blk), (yyvsp[0].blk)); } -#line 2817 "parser.c" /* yacc.c:1646 */ +#line 2816 "parser.c" /* yacc.c:1646 */ break; case 58: @@ -2822,7 +2821,7 @@ yyreduce: (yyval.blk) = gen_param_regular(jv_string_value((yyvsp[0].literal))); jv_free((yyvsp[0].literal)); } -#line 2826 "parser.c" /* yacc.c:1646 */ +#line 2825 "parser.c" /* yacc.c:1646 */ break; case 59: @@ -2831,13 +2830,13 @@ yyreduce: (yyval.blk) = gen_param(jv_string_value((yyvsp[0].literal))); jv_free((yyvsp[0].literal)); } -#line 2835 "parser.c" /* yacc.c:1646 */ +#line 2834 "parser.c" /* yacc.c:1646 */ break; case 60: #line 565 "parser.y" /* yacc.c:1646 */ { (yyval.literal) = jv_string("text"); } -#line 2841 "parser.c" /* yacc.c:1646 */ +#line 2840 "parser.c" /* yacc.c:1646 */ break; case 61: @@ -2846,13 +2845,13 @@ yyreduce: (yyval.blk) = (yyvsp[-1].blk); jv_free((yyvsp[-2].literal)); } -#line 2850 "parser.c" /* yacc.c:1646 */ +#line 2849 "parser.c" /* yacc.c:1646 */ break; case 62: #line 569 "parser.y" /* yacc.c:1646 */ { (yyval.literal) = (yyvsp[-1].literal); } -#line 2856 "parser.c" /* yacc.c:1646 */ +#line 2855 "parser.c" /* yacc.c:1646 */ break; case 63: @@ -2861,7 +2860,7 @@ yyreduce: (yyval.blk) = (yyvsp[-1].blk); jv_free((yyvsp[-2].literal)); } -#line 2865 "parser.c" /* yacc.c:1646 */ +#line 2864 "parser.c" /* yacc.c:1646 */ break; case 64: @@ -2869,7 +2868,7 @@ yyreduce: { (yyval.blk) = gen_const(jv_string("")); } -#line 2873 "parser.c" /* yacc.c:1646 */ +#line 2872 "parser.c" /* yacc.c:1646 */ break; case 65: @@ -2877,7 +2876,7 @@ yyreduce: { (yyval.blk) = gen_binop((yyvsp[-1].blk), gen_const((yyvsp[0].literal)), '+'); } -#line 2881 "parser.c" /* yacc.c:1646 */ +#line 2880 "parser.c" /* yacc.c:1646 */ break; case 66: @@ -2885,7 +2884,7 @@ yyreduce: { (yyval.blk) = gen_binop((yyvsp[-3].blk), gen_format((yyvsp[-1].blk), jv_copy((yyvsp[-4].literal))), '+'); } -#line 2889 "parser.c" /* yacc.c:1646 */ +#line 2888 "parser.c" /* yacc.c:1646 */ break; case 67: @@ -2893,7 +2892,7 @@ yyreduce: { (yyval.blk) = gen_cond((yyvsp[-3].blk), (yyvsp[-1].blk), (yyvsp[0].blk)); } -#line 2897 "parser.c" /* yacc.c:1646 */ +#line 2896 "parser.c" /* yacc.c:1646 */ break; case 68: @@ -2901,15 +2900,15 @@ yyreduce: { (yyval.blk) = (yyvsp[-1].blk); } -#line 2905 "parser.c" /* yacc.c:1646 */ +#line 2904 "parser.c" /* yacc.c:1646 */ break; case 69: #line 596 "parser.y" /* yacc.c:1646 */ - { + { (yyval.blk) = block_join((yyvsp[-2].blk), (yyvsp[0].blk)); } -#line 2913 "parser.c" /* yacc.c:1646 */ +#line 2912 "parser.c" /* yacc.c:1646 */ break; case 70: @@ -2917,7 +2916,7 @@ yyreduce: { (yyval.blk) = BLOCK((yyvsp[0].blk), gen_call("_negate", gen_noop())); } -#line 2921 "parser.c" /* yacc.c:1646 */ +#line 2920 "parser.c" /* yacc.c:1646 */ break; case 71: @@ -2925,15 +2924,15 @@ yyreduce: { (yyval.blk) = (yyvsp[0].blk); } -#line 2929 "parser.c" /* yacc.c:1646 */ +#line 2928 "parser.c" /* yacc.c:1646 */ break; case 72: #line 608 "parser.y" /* yacc.c:1646 */ { - (yyval.blk) = gen_noop(); + (yyval.blk) = gen_noop(); } -#line 2937 "parser.c" /* yacc.c:1646 */ +#line 2936 "parser.c" /* yacc.c:1646 */ break; case 73: @@ -2941,7 +2940,7 @@ yyreduce: { (yyval.blk) = gen_call("recurse", gen_noop()); } -#line 2945 "parser.c" /* yacc.c:1646 */ +#line 2944 "parser.c" /* yacc.c:1646 */ break; case 74: @@ -2954,7 +2953,7 @@ yyreduce: jv_free(v); jv_free((yyvsp[0].literal)); } -#line 2958 "parser.c" /* yacc.c:1646 */ +#line 2957 "parser.c" /* yacc.c:1646 */ break; case 75: @@ -2963,7 +2962,7 @@ yyreduce: FAIL((yyloc), "break requires a label to break to"); (yyval.blk) = gen_noop(); } -#line 2967 "parser.c" /* yacc.c:1646 */ +#line 2966 "parser.c" /* yacc.c:1646 */ break; case 76: @@ -2971,15 +2970,15 @@ yyreduce: { (yyval.blk) = gen_index_opt((yyvsp[-2].blk), gen_const((yyvsp[-1].literal))); } -#line 2975 "parser.c" /* yacc.c:1646 */ +#line 2974 "parser.c" /* yacc.c:1646 */ break; case 77: #line 629 "parser.y" /* yacc.c:1646 */ - { - (yyval.blk) = gen_index_opt(gen_noop(), gen_const((yyvsp[-1].literal))); + { + (yyval.blk) = gen_index_opt(gen_noop(), gen_const((yyvsp[-1].literal))); } -#line 2983 "parser.c" /* yacc.c:1646 */ +#line 2982 "parser.c" /* yacc.c:1646 */ break; case 78: @@ -2987,7 +2986,7 @@ yyreduce: { (yyval.blk) = gen_index_opt((yyvsp[-3].blk), (yyvsp[-1].blk)); } -#line 2991 "parser.c" /* yacc.c:1646 */ +#line 2990 "parser.c" /* yacc.c:1646 */ break; case 79: @@ -2995,7 +2994,7 @@ yyreduce: { (yyval.blk) = gen_index_opt(gen_noop(), (yyvsp[-1].blk)); } -#line 2999 "parser.c" /* yacc.c:1646 */ +#line 2998 "parser.c" /* yacc.c:1646 */ break; case 80: @@ -3003,15 +3002,15 @@ yyreduce: { (yyval.blk) = gen_index((yyvsp[-1].blk), gen_const((yyvsp[0].literal))); } -#line 3007 "parser.c" /* yacc.c:1646 */ +#line 3006 "parser.c" /* yacc.c:1646 */ break; case 81: #line 641 "parser.y" /* yacc.c:1646 */ - { - (yyval.blk) = gen_index(gen_noop(), gen_const((yyvsp[0].literal))); + { + (yyval.blk) = gen_index(gen_noop(), gen_const((yyvsp[0].literal))); } -#line 3015 "parser.c" /* yacc.c:1646 */ +#line 3014 "parser.c" /* yacc.c:1646 */ break; case 82: @@ -3019,7 +3018,7 @@ yyreduce: { (yyval.blk) = gen_index((yyvsp[-2].blk), (yyvsp[0].blk)); } -#line 3023 "parser.c" /* yacc.c:1646 */ +#line 3022 "parser.c" /* yacc.c:1646 */ break; case 83: @@ -3027,7 +3026,7 @@ yyreduce: { (yyval.blk) = gen_index(gen_noop(), (yyvsp[0].blk)); } -#line 3031 "parser.c" /* yacc.c:1646 */ +#line 3030 "parser.c" /* yacc.c:1646 */ break; case 84: @@ -3036,7 +3035,7 @@ yyreduce: FAIL((yyloc), "try .[\"field\"] instead of .field for unusually named fields"); (yyval.blk) = gen_noop(); } -#line 3040 "parser.c" /* yacc.c:1646 */ +#line 3039 "parser.c" /* yacc.c:1646 */ break; case 85: @@ -3046,39 +3045,39 @@ yyreduce: FAIL((yyloc), "try .[\"field\"] instead of .field for unusually named fields"); (yyval.blk) = gen_noop(); } -#line 3050 "parser.c" /* yacc.c:1646 */ +#line 3049 "parser.c" /* yacc.c:1646 */ break; case 86: #line 660 "parser.y" /* yacc.c:1646 */ { - (yyval.blk) = gen_index_opt((yyvsp[-4].blk), (yyvsp[-2].blk)); + (yyval.blk) = gen_index_opt((yyvsp[-4].blk), (yyvsp[-2].blk)); } -#line 3058 "parser.c" /* yacc.c:1646 */ +#line 3057 "parser.c" /* yacc.c:1646 */ break; case 87: #line 663 "parser.y" /* yacc.c:1646 */ { - (yyval.blk) = gen_index((yyvsp[-3].blk), (yyvsp[-1].blk)); + (yyval.blk) = gen_index((yyvsp[-3].blk), (yyvsp[-1].blk)); } -#line 3066 "parser.c" /* yacc.c:1646 */ +#line 3065 "parser.c" /* yacc.c:1646 */ break; case 88: #line 666 "parser.y" /* yacc.c:1646 */ { - (yyval.blk) = block_join((yyvsp[-3].blk), gen_op_simple(EACH_OPT)); + (yyval.blk) = block_join((yyvsp[-3].blk), gen_op_simple(EACH_OPT)); } -#line 3074 "parser.c" /* yacc.c:1646 */ +#line 3073 "parser.c" /* yacc.c:1646 */ break; case 89: #line 669 "parser.y" /* yacc.c:1646 */ { - (yyval.blk) = block_join((yyvsp[-2].blk), gen_op_simple(EACH)); + (yyval.blk) = block_join((yyvsp[-2].blk), gen_op_simple(EACH)); } -#line 3082 "parser.c" /* yacc.c:1646 */ +#line 3081 "parser.c" /* yacc.c:1646 */ break; case 90: @@ -3086,7 +3085,7 @@ yyreduce: { (yyval.blk) = gen_slice_index((yyvsp[-6].blk), (yyvsp[-4].blk), (yyvsp[-2].blk), INDEX_OPT); } -#line 3090 "parser.c" /* yacc.c:1646 */ +#line 3089 "parser.c" /* yacc.c:1646 */ break; case 91: @@ -3094,7 +3093,7 @@ yyreduce: { (yyval.blk) = gen_slice_index((yyvsp[-5].blk), (yyvsp[-3].blk), gen_const(jv_null()), INDEX_OPT); } -#line 3098 "parser.c" /* yacc.c:1646 */ +#line 3097 "parser.c" /* yacc.c:1646 */ break; case 92: @@ -3102,7 +3101,7 @@ yyreduce: { (yyval.blk) = gen_slice_index((yyvsp[-5].blk), gen_const(jv_null()), (yyvsp[-2].blk), INDEX_OPT); } -#line 3106 "parser.c" /* yacc.c:1646 */ +#line 3105 "parser.c" /* yacc.c:1646 */ break; case 93: @@ -3110,7 +3109,7 @@ yyreduce: { (yyval.blk) = gen_slice_index((yyvsp[-5].blk), (yyvsp[-3].blk), (yyvsp[-1].blk), INDEX); } -#line 3114 "parser.c" /* yacc.c:1646 */ +#line 3113 "parser.c" /* yacc.c:1646 */ break; case 94: @@ -3118,7 +3117,7 @@ yyreduce: { (yyval.blk) = gen_slice_index((yyvsp[-4].blk), (yyvsp[-2].blk), gen_const(jv_null()), INDEX); } -#line 3122 "parser.c" /* yacc.c:1646 */ +#line 3121 "parser.c" /* yacc.c:1646 */ break; case 95: @@ -3126,15 +3125,15 @@ yyreduce: { (yyval.blk) = gen_slice_index((yyvsp[-4].blk), gen_const(jv_null()), (yyvsp[-1].blk), INDEX); } -#line 3130 "parser.c" /* yacc.c:1646 */ +#line 3129 "parser.c" /* yacc.c:1646 */ break; case 96: #line 690 "parser.y" /* yacc.c:1646 */ { - (yyval.blk) = gen_const((yyvsp[0].literal)); + (yyval.blk) = gen_const((yyvsp[0].literal)); } -#line 3138 "parser.c" /* yacc.c:1646 */ +#line 3137 "parser.c" /* yacc.c:1646 */ break; case 97: @@ -3142,7 +3141,7 @@ yyreduce: { (yyval.blk) = (yyvsp[0].blk); } -#line 3146 "parser.c" /* yacc.c:1646 */ +#line 3145 "parser.c" /* yacc.c:1646 */ break; case 98: @@ -3150,43 +3149,43 @@ yyreduce: { (yyval.blk) = gen_format(gen_noop(), (yyvsp[0].literal)); } -#line 3154 "parser.c" /* yacc.c:1646 */ +#line 3153 "parser.c" /* yacc.c:1646 */ break; case 99: #line 699 "parser.y" /* yacc.c:1646 */ - { - (yyval.blk) = (yyvsp[-1].blk); + { + (yyval.blk) = (yyvsp[-1].blk); } -#line 3162 "parser.c" /* yacc.c:1646 */ +#line 3161 "parser.c" /* yacc.c:1646 */ break; case 100: #line 702 "parser.y" /* yacc.c:1646 */ - { - (yyval.blk) = gen_collect((yyvsp[-1].blk)); + { + (yyval.blk) = gen_collect((yyvsp[-1].blk)); } -#line 3170 "parser.c" /* yacc.c:1646 */ +#line 3169 "parser.c" /* yacc.c:1646 */ break; case 101: #line 705 "parser.y" /* yacc.c:1646 */ - { - (yyval.blk) = gen_const(jv_array()); + { + (yyval.blk) = gen_const(jv_array()); } -#line 3178 "parser.c" /* yacc.c:1646 */ +#line 3177 "parser.c" /* yacc.c:1646 */ break; case 102: #line 708 "parser.y" /* yacc.c:1646 */ - { + { block o = gen_const_object((yyvsp[-1].blk)); if (o.first != NULL) (yyval.blk) = o; else (yyval.blk) = BLOCK(gen_subexp(gen_const(jv_object())), (yyvsp[-1].blk), gen_op_simple(POP)); } -#line 3190 "parser.c" /* yacc.c:1646 */ +#line 3189 "parser.c" /* yacc.c:1646 */ break; case 103: @@ -3195,7 +3194,7 @@ yyreduce: (yyval.blk) = gen_const(JV_OBJECT(jv_string("file"), jv_copy(locations->fname), jv_string("line"), jv_number(locfile_get_line(locations, (yyloc).start) + 1))); } -#line 3199 "parser.c" /* yacc.c:1646 */ +#line 3198 "parser.c" /* yacc.c:1646 */ break; case 104: @@ -3204,7 +3203,7 @@ yyreduce: (yyval.blk) = gen_location((yyloc), locations, gen_op_unbound(LOADV, jv_string_value((yyvsp[0].literal)))); jv_free((yyvsp[0].literal)); } -#line 3208 "parser.c" /* yacc.c:1646 */ +#line 3207 "parser.c" /* yacc.c:1646 */ break; case 105: @@ -3221,7 +3220,7 @@ yyreduce: (yyval.blk) = gen_location((yyloc), locations, gen_call(s, gen_noop())); jv_free((yyvsp[0].literal)); } -#line 3225 "parser.c" /* yacc.c:1646 */ +#line 3224 "parser.c" /* yacc.c:1646 */ break; case 106: @@ -3231,31 +3230,31 @@ yyreduce: (yyval.blk) = gen_location((yylsp[-3]), locations, (yyval.blk)); jv_free((yyvsp[-3].literal)); } -#line 3235 "parser.c" /* yacc.c:1646 */ +#line 3234 "parser.c" /* yacc.c:1646 */ break; case 107: #line 740 "parser.y" /* yacc.c:1646 */ { (yyval.blk) = gen_noop(); } -#line 3241 "parser.c" /* yacc.c:1646 */ +#line 3240 "parser.c" /* yacc.c:1646 */ break; case 108: #line 741 "parser.y" /* yacc.c:1646 */ { (yyval.blk) = gen_noop(); } -#line 3247 "parser.c" /* yacc.c:1646 */ +#line 3246 "parser.c" /* yacc.c:1646 */ break; case 109: #line 742 "parser.y" /* yacc.c:1646 */ { (yyval.blk) = (yyvsp[-3].blk); } -#line 3253 "parser.c" /* yacc.c:1646 */ +#line 3252 "parser.c" /* yacc.c:1646 */ break; case 110: #line 743 "parser.y" /* yacc.c:1646 */ { (yyval.blk) = gen_noop(); } -#line 3259 "parser.c" /* yacc.c:1646 */ +#line 3258 "parser.c" /* yacc.c:1646 */ break; case 111: @@ -3263,7 +3262,7 @@ yyreduce: { (yyval.blk) = (yyvsp[0].blk); } -#line 3267 "parser.c" /* yacc.c:1646 */ +#line 3266 "parser.c" /* yacc.c:1646 */ break; case 112: @@ -3271,7 +3270,7 @@ yyreduce: { (yyval.blk) = BLOCK((yyvsp[-2].blk), (yyvsp[0].blk)); } -#line 3275 "parser.c" /* yacc.c:1646 */ +#line 3274 "parser.c" /* yacc.c:1646 */ break; case 113: @@ -3279,7 +3278,7 @@ yyreduce: { (yyval.blk) = gen_lambda((yyvsp[0].blk)); } -#line 3283 "parser.c" /* yacc.c:1646 */ +#line 3282 "parser.c" /* yacc.c:1646 */ break; case 114: @@ -3288,7 +3287,7 @@ yyreduce: (yyval.blk) = gen_op_unbound(STOREV, jv_string_value((yyvsp[0].literal))); jv_free((yyvsp[0].literal)); } -#line 3292 "parser.c" /* yacc.c:1646 */ +#line 3291 "parser.c" /* yacc.c:1646 */ break; case 115: @@ -3296,7 +3295,7 @@ yyreduce: { (yyval.blk) = BLOCK((yyvsp[-1].blk), gen_op_simple(POP)); } -#line 3300 "parser.c" /* yacc.c:1646 */ +#line 3299 "parser.c" /* yacc.c:1646 */ break; case 116: @@ -3304,7 +3303,7 @@ yyreduce: { (yyval.blk) = BLOCK((yyvsp[-1].blk), gen_op_simple(POP)); } -#line 3308 "parser.c" /* yacc.c:1646 */ +#line 3307 "parser.c" /* yacc.c:1646 */ break; case 117: @@ -3312,7 +3311,7 @@ yyreduce: { (yyval.blk) = gen_array_matcher(gen_noop(), (yyvsp[0].blk)); } -#line 3316 "parser.c" /* yacc.c:1646 */ +#line 3315 "parser.c" /* yacc.c:1646 */ break; case 118: @@ -3320,7 +3319,7 @@ yyreduce: { (yyval.blk) = gen_array_matcher((yyvsp[-2].blk), (yyvsp[0].blk)); } -#line 3324 "parser.c" /* yacc.c:1646 */ +#line 3323 "parser.c" /* yacc.c:1646 */ break; case 119: @@ -3328,7 +3327,7 @@ yyreduce: { (yyval.blk) = (yyvsp[0].blk); } -#line 3332 "parser.c" /* yacc.c:1646 */ +#line 3331 "parser.c" /* yacc.c:1646 */ break; case 120: @@ -3336,7 +3335,7 @@ yyreduce: { (yyval.blk) = BLOCK((yyvsp[-2].blk), (yyvsp[0].blk)); } -#line 3340 "parser.c" /* yacc.c:1646 */ +#line 3339 "parser.c" /* yacc.c:1646 */ break; case 121: @@ -3344,7 +3343,7 @@ yyreduce: { (yyval.blk) = gen_object_matcher(gen_const((yyvsp[0].literal)), gen_op_unbound(STOREV, jv_string_value((yyvsp[0].literal)))); } -#line 3348 "parser.c" /* yacc.c:1646 */ +#line 3347 "parser.c" /* yacc.c:1646 */ break; case 122: @@ -3352,7 +3351,7 @@ yyreduce: { (yyval.blk) = gen_object_matcher(gen_const((yyvsp[-2].literal)), (yyvsp[0].blk)); } -#line 3356 "parser.c" /* yacc.c:1646 */ +#line 3355 "parser.c" /* yacc.c:1646 */ break; case 123: @@ -3360,7 +3359,7 @@ yyreduce: { (yyval.blk) = gen_object_matcher(gen_const((yyvsp[-2].literal)), (yyvsp[0].blk)); } -#line 3364 "parser.c" /* yacc.c:1646 */ +#line 3363 "parser.c" /* yacc.c:1646 */ break; case 124: @@ -3368,7 +3367,7 @@ yyreduce: { (yyval.blk) = gen_object_matcher((yyvsp[-2].blk), (yyvsp[0].blk)); } -#line 3372 "parser.c" /* yacc.c:1646 */ +#line 3371 "parser.c" /* yacc.c:1646 */ break; case 125: @@ -3376,7 +3375,7 @@ yyreduce: { (yyval.blk) = gen_object_matcher((yyvsp[-3].blk), (yyvsp[0].blk)); } -#line 3380 "parser.c" /* yacc.c:1646 */ +#line 3379 "parser.c" /* yacc.c:1646 */ break; case 126: @@ -3384,7 +3383,7 @@ yyreduce: { (yyval.literal) = jv_string("as"); } -#line 3388 "parser.c" /* yacc.c:1646 */ +#line 3387 "parser.c" /* yacc.c:1646 */ break; case 127: @@ -3392,7 +3391,7 @@ yyreduce: { (yyval.literal) = jv_string("def"); } -#line 3396 "parser.c" /* yacc.c:1646 */ +#line 3395 "parser.c" /* yacc.c:1646 */ break; case 128: @@ -3400,7 +3399,7 @@ yyreduce: { (yyval.literal) = jv_string("module"); } -#line 3404 "parser.c" /* yacc.c:1646 */ +#line 3403 "parser.c" /* yacc.c:1646 */ break; case 129: @@ -3408,7 +3407,7 @@ yyreduce: { (yyval.literal) = jv_string("import"); } -#line 3412 "parser.c" /* yacc.c:1646 */ +#line 3411 "parser.c" /* yacc.c:1646 */ break; case 130: @@ -3416,7 +3415,7 @@ yyreduce: { (yyval.literal) = jv_string("include"); } -#line 3420 "parser.c" /* yacc.c:1646 */ +#line 3419 "parser.c" /* yacc.c:1646 */ break; case 131: @@ -3424,7 +3423,7 @@ yyreduce: { (yyval.literal) = jv_string("if"); } -#line 3428 "parser.c" /* yacc.c:1646 */ +#line 3427 "parser.c" /* yacc.c:1646 */ break; case 132: @@ -3432,7 +3431,7 @@ yyreduce: { (yyval.literal) = jv_string("then"); } -#line 3436 "parser.c" /* yacc.c:1646 */ +#line 3435 "parser.c" /* yacc.c:1646 */ break; case 133: @@ -3440,7 +3439,7 @@ yyreduce: { (yyval.literal) = jv_string("else"); } -#line 3444 "parser.c" /* yacc.c:1646 */ +#line 3443 "parser.c" /* yacc.c:1646 */ break; case 134: @@ -3448,7 +3447,7 @@ yyreduce: { (yyval.literal) = jv_string("elif"); } -#line 3452 "parser.c" /* yacc.c:1646 */ +#line 3451 "parser.c" /* yacc.c:1646 */ break; case 135: @@ -3456,7 +3455,7 @@ yyreduce: { (yyval.literal) = jv_string("reduce"); } -#line 3460 "parser.c" /* yacc.c:1646 */ +#line 3459 "parser.c" /* yacc.c:1646 */ break; case 136: @@ -3464,7 +3463,7 @@ yyreduce: { (yyval.literal) = jv_string("foreach"); } -#line 3468 "parser.c" /* yacc.c:1646 */ +#line 3467 "parser.c" /* yacc.c:1646 */ break; case 137: @@ -3472,7 +3471,7 @@ yyreduce: { (yyval.literal) = jv_string("end"); } -#line 3476 "parser.c" /* yacc.c:1646 */ +#line 3475 "parser.c" /* yacc.c:1646 */ break; case 138: @@ -3480,7 +3479,7 @@ yyreduce: { (yyval.literal) = jv_string("and"); } -#line 3484 "parser.c" /* yacc.c:1646 */ +#line 3483 "parser.c" /* yacc.c:1646 */ break; case 139: @@ -3488,7 +3487,7 @@ yyreduce: { (yyval.literal) = jv_string("or"); } -#line 3492 "parser.c" /* yacc.c:1646 */ +#line 3491 "parser.c" /* yacc.c:1646 */ break; case 140: @@ -3496,7 +3495,7 @@ yyreduce: { (yyval.literal) = jv_string("try"); } -#line 3500 "parser.c" /* yacc.c:1646 */ +#line 3499 "parser.c" /* yacc.c:1646 */ break; case 141: @@ -3504,7 +3503,7 @@ yyreduce: { (yyval.literal) = jv_string("catch"); } -#line 3508 "parser.c" /* yacc.c:1646 */ +#line 3507 "parser.c" /* yacc.c:1646 */ break; case 142: @@ -3512,7 +3511,7 @@ yyreduce: { (yyval.literal) = jv_string("label"); } -#line 3516 "parser.c" /* yacc.c:1646 */ +#line 3515 "parser.c" /* yacc.c:1646 */ break; case 143: @@ -3520,7 +3519,7 @@ yyreduce: { (yyval.literal) = jv_string("break"); } -#line 3524 "parser.c" /* yacc.c:1646 */ +#line 3523 "parser.c" /* yacc.c:1646 */ break; case 144: @@ -3528,41 +3527,41 @@ yyreduce: { (yyval.literal) = jv_string("__loc__"); } -#line 3532 "parser.c" /* yacc.c:1646 */ +#line 3531 "parser.c" /* yacc.c:1646 */ break; case 145: #line 863 "parser.y" /* yacc.c:1646 */ - { - (yyval.blk)=gen_noop(); + { + (yyval.blk)=gen_noop(); } -#line 3540 "parser.c" /* yacc.c:1646 */ +#line 3539 "parser.c" /* yacc.c:1646 */ break; case 146: #line 866 "parser.y" /* yacc.c:1646 */ { (yyval.blk) = (yyvsp[0].blk); } -#line 3546 "parser.c" /* yacc.c:1646 */ +#line 3545 "parser.c" /* yacc.c:1646 */ break; case 147: #line 867 "parser.y" /* yacc.c:1646 */ { (yyval.blk)=block_join((yyvsp[-2].blk), (yyvsp[0].blk)); } -#line 3552 "parser.c" /* yacc.c:1646 */ +#line 3551 "parser.c" /* yacc.c:1646 */ break; case 148: #line 868 "parser.y" /* yacc.c:1646 */ { (yyval.blk) = (yyvsp[0].blk); } -#line 3558 "parser.c" /* yacc.c:1646 */ +#line 3557 "parser.c" /* yacc.c:1646 */ break; case 149: #line 871 "parser.y" /* yacc.c:1646 */ - { + { (yyval.blk) = gen_dictpair(gen_const((yyvsp[-2].literal)), (yyvsp[0].blk)); } -#line 3566 "parser.c" /* yacc.c:1646 */ +#line 3565 "parser.c" /* yacc.c:1646 */ break; case 150: @@ -3570,7 +3569,7 @@ yyreduce: { (yyval.blk) = gen_dictpair(gen_const((yyvsp[-2].literal)), (yyvsp[0].blk)); } -#line 3574 "parser.c" /* yacc.c:1646 */ +#line 3573 "parser.c" /* yacc.c:1646 */ break; case 151: @@ -3578,7 +3577,7 @@ yyreduce: { (yyval.blk) = gen_dictpair((yyvsp[-2].blk), (yyvsp[0].blk)); } -#line 3582 "parser.c" /* yacc.c:1646 */ +#line 3581 "parser.c" /* yacc.c:1646 */ break; case 152: @@ -3587,7 +3586,7 @@ yyreduce: (yyval.blk) = gen_dictpair((yyvsp[0].blk), BLOCK(gen_op_simple(POP), gen_op_simple(DUP2), gen_op_simple(DUP2), gen_op_simple(INDEX))); } -#line 3591 "parser.c" /* yacc.c:1646 */ +#line 3590 "parser.c" /* yacc.c:1646 */ break; case 153: @@ -3596,7 +3595,7 @@ yyreduce: (yyval.blk) = gen_dictpair(gen_const((yyvsp[0].literal)), gen_location((yyloc), locations, gen_op_unbound(LOADV, jv_string_value((yyvsp[0].literal))))); } -#line 3600 "parser.c" /* yacc.c:1646 */ +#line 3599 "parser.c" /* yacc.c:1646 */ break; case 154: @@ -3605,7 +3604,7 @@ yyreduce: (yyval.blk) = gen_dictpair(gen_const(jv_copy((yyvsp[0].literal))), gen_index(gen_noop(), gen_const((yyvsp[0].literal)))); } -#line 3609 "parser.c" /* yacc.c:1646 */ +#line 3608 "parser.c" /* yacc.c:1646 */ break; case 155: @@ -3613,17 +3612,17 @@ yyreduce: { (yyval.blk) = gen_dictpair((yyvsp[-3].blk), (yyvsp[0].blk)); } -#line 3617 "parser.c" /* yacc.c:1646 */ +#line 3616 "parser.c" /* yacc.c:1646 */ break; case 156: #line 895 "parser.y" /* yacc.c:1646 */ { (yyval.blk) = (yyvsp[0].blk); } -#line 3623 "parser.c" /* yacc.c:1646 */ +#line 3622 "parser.c" /* yacc.c:1646 */ break; -#line 3627 "parser.c" /* yacc.c:1646 */ +#line 3626 "parser.c" /* yacc.c:1646 */ default: break; } /* User semantic actions sometimes alter yychar, and that requires diff --git a/parser.h b/parser.h index ee26d283..6d371a95 100644 --- a/parser.h +++ b/parser.h @@ -56,9 +56,8 @@ struct lexer_param; (Loc).end = YYRHSLOC(Rhs, 0).end; \ } \ } while (0) - -#line 62 "parser.h" /* yacc.c:1909 */ +#line 61 "parser.h" /* yacc.c:1909 */ /* Token type. */ #ifndef YYTOKENTYPE @@ -163,7 +162,7 @@ union YYSTYPE jv literal; block blk; -#line 167 "parser.h" /* yacc.c:1909 */ +#line 166 "parser.h" /* yacc.c:1909 */ }; # define YYSTYPE_IS_TRIVIAL 1 # define YYSTYPE_IS_DECLARED 1 diff --git a/parser.y b/parser.y index c196a8ea..8ec68ef0 100644 --- a/parser.y +++ b/parser.y @@ -23,7 +23,7 @@ struct lexer_param; (Loc).end = YYRHSLOC(Rhs, 0).end; \ } \ } while (0) - } +} %locations %error-verbose @@ -123,7 +123,7 @@ struct lexer_param { /*YYERROR*/; \ } while (0) -void yyerror(YYLTYPE* loc, block* answer, int* errors, +void yyerror(YYLTYPE* loc, block* answer, int* errors, struct locfile* locations, struct lexer_param* lexer_param_ptr, const char *s){ (*errors)++; if (strstr(s, "unexpected")) { @@ -137,7 +137,7 @@ void yyerror(YYLTYPE* loc, block* answer, int* errors, } } -int yylex(YYSTYPE* yylval, YYLTYPE* yylloc, block* answer, int* errors, +int yylex(YYSTYPE* yylval, YYLTYPE* yylloc, block* answer, int* errors, struct locfile* locations, struct lexer_param* lexer_param_ptr) { yyscan_t lexer = lexer_param_ptr->lexer; int tok = jq_yylex(yylval, yylloc, lexer); @@ -250,16 +250,16 @@ static block gen_definedor_assign(block object, block val) { return BLOCK(gen_op_simple(DUP), val, tmp, gen_call("_modify", BLOCK(gen_lambda(object), - gen_lambda(gen_definedor(gen_noop(), + gen_lambda(gen_definedor(gen_noop(), gen_op_bound(LOADV, tmp)))))); } - + static block gen_update(block object, block val, int optype) { block tmp = gen_op_var_fresh(STOREV, "tmp"); return BLOCK(gen_op_simple(DUP), val, tmp, - gen_call("_modify", BLOCK(gen_lambda(object), + gen_call("_modify", BLOCK(gen_lambda(object), gen_lambda(gen_binop(gen_noop(), gen_op_bound(LOADV, tmp), optype))))); @@ -274,7 +274,7 @@ Module Imports Exp { } | Module Imports FuncDefs { *answer = BLOCK($1, $2, $3); -} +} Module: %empty { @@ -369,7 +369,7 @@ Exp '=' Exp { Exp "or" Exp { $$ = gen_or($1, $3); -} | +} | Exp "and" Exp { $$ = gen_and($1, $3); @@ -387,12 +387,12 @@ Exp "|=" Exp { $$ = gen_call("_modify", BLOCK(gen_lambda($1), gen_lambda($3))); } | -Exp '|' Exp { - $$ = block_join($1, $3); +Exp '|' Exp { + $$ = block_join($1, $3); } | -Exp ',' Exp { - $$ = gen_both($1, $3); +Exp ',' Exp { + $$ = gen_both($1, $3); } | Exp '+' Exp { @@ -467,8 +467,8 @@ Exp ">=" Exp { $$ = gen_binop($1, $3, GREATEREQ); } | -Term { - $$ = $1; +Term { + $$ = $1; } Import: @@ -593,7 +593,7 @@ ElseBody: } ExpD: -ExpD '|' ExpD { +ExpD '|' ExpD { $$ = block_join($1, $3); } | '-' ExpD { @@ -606,7 +606,7 @@ Term { Term: '.' { - $$ = gen_noop(); + $$ = gen_noop(); } | REC { $$ = gen_call("recurse", gen_noop()); @@ -626,8 +626,8 @@ BREAK error { Term FIELD '?' { $$ = gen_index_opt($1, gen_const($2)); } | -FIELD '?' { - $$ = gen_index_opt(gen_noop(), gen_const($1)); +FIELD '?' { + $$ = gen_index_opt(gen_noop(), gen_const($1)); } | Term '.' String '?' { $$ = gen_index_opt($1, $3); @@ -638,8 +638,8 @@ Term '.' String '?' { Term FIELD { $$ = gen_index($1, gen_const($2)); } | -FIELD { - $$ = gen_index(gen_noop(), gen_const($1)); +FIELD { + $$ = gen_index(gen_noop(), gen_const($1)); } | Term '.' String { $$ = gen_index($1, $3); @@ -655,19 +655,19 @@ Term '.' String { jv_free($2); FAIL(@$, "try .[\"field\"] instead of .field for unusually named fields"); $$ = gen_noop(); -} | +} | /* FIXME: string literals */ Term '[' Exp ']' '?' { - $$ = gen_index_opt($1, $3); + $$ = gen_index_opt($1, $3); } | Term '[' Exp ']' { - $$ = gen_index($1, $3); + $$ = gen_index($1, $3); } | Term '[' ']' '?' { - $$ = block_join($1, gen_op_simple(EACH_OPT)); + $$ = block_join($1, gen_op_simple(EACH_OPT)); } | Term '[' ']' { - $$ = block_join($1, gen_op_simple(EACH)); + $$ = block_join($1, gen_op_simple(EACH)); } | Term '[' Exp ':' Exp ']' '?' { $$ = gen_slice_index($1, $3, $5, INDEX_OPT); @@ -688,7 +688,7 @@ Term '[' ':' Exp ']' { $$ = gen_slice_index($1, gen_const(jv_null()), $4, INDEX); } | LITERAL { - $$ = gen_const($1); + $$ = gen_const($1); } | String { $$ = $1; @@ -696,16 +696,16 @@ String { FORMAT { $$ = gen_format(gen_noop(), $1); } | -'(' Exp ')' { - $$ = $2; -} | -'[' Exp ']' { - $$ = gen_collect($2); +'(' Exp ')' { + $$ = $2; } | -'[' ']' { - $$ = gen_const(jv_array()); +'[' Exp ']' { + $$ = gen_collect($2); } | -'{' MkDict '}' { +'[' ']' { + $$ = gen_const(jv_array()); +} | +'{' MkDict '}' { block o = gen_const_object($2); if (o.first != NULL) $$ = o; @@ -719,7 +719,7 @@ FORMAT { '$' IDENT { $$ = gen_location(@$, locations, gen_op_unbound(LOADV, jv_string_value($2))); jv_free($2); -} | +} | IDENT { const char *s = jv_string_value($1); if (strcmp(s, "false") == 0) @@ -860,15 +860,15 @@ Keyword: } MkDict: -%empty { - $$=gen_noop(); +%empty { + $$=gen_noop(); } | MkDictPair { $$ = $1; } | MkDictPair ',' MkDict { $$=block_join($1, $3); } | error ',' MkDict { $$ = $3; } MkDictPair: -IDENT ':' ExpD { +IDENT ':' ExpD { $$ = gen_dictpair(gen_const($1), $3); } | Keyword ':' ExpD { diff --git a/util.c b/util.c index e4901301..86b19831 100644 --- a/util.c +++ b/util.c @@ -104,7 +104,7 @@ jv get_home() { if (!home) { #ifndef WIN32 struct passwd* pwd = getpwuid(getuid()); - if (pwd) + if (pwd) ret = jv_string(pwd->pw_dir); else ret = jv_invalid_with_msg(jv_string("Could not find home directory.")); @@ -323,7 +323,7 @@ static int jq_util_input_read_more(jq_util_input_state *state) { if (p != NULL) state->current_line++; - + if (p == NULL && state->parser != NULL) { /* * There should be no NULs in JSON texts (but JSON text