diff --git a/src/builtin.cmod b/src/builtin.cmod index bd6b0fa0e32beec16d34461d95b1b22cd6700db8..6f47de33de00e13151f6f8f8f66a3d79a47da00d 100644 --- a/src/builtin.cmod +++ b/src/builtin.cmod @@ -3457,7 +3457,7 @@ PIKECLASS multi_string_replace if( THIS->ctx.v ) { struct svalue tmp; - tmp.type = PIKE_T_STRING; + SET_SVAL_TYPE(tmp, PIKE_T_STRING); for( i=0; i<THIS->ctx.num; i++ ) { res += sizeof(struct replace_many_tupel); diff --git a/src/builtin_functions.c b/src/builtin_functions.c index 47e14d40b18187ec9e74cb6393c7e322f5dcdd55..0b7b07c68ef120fa03d7aaf182acde6822ba00e5 100644 --- a/src/builtin_functions.c +++ b/src/builtin_functions.c @@ -7610,7 +7610,7 @@ unsigned int rec_size_svalue( struct svalue *s, struct mapping **m ) struct svalue *x; struct keypair *k; - switch( s->type ) + switch( TYPEOF(*s) ) { case PIKE_T_STRING: /* FIXME: This makes assumptions about the threshold for short strings. */ @@ -7636,7 +7636,7 @@ unsigned int rec_size_svalue( struct svalue *s, struct mapping **m ) } low_mapping_insert( *m, s, &svalue_int_one, 0 ); - switch( s->type ) + switch( TYPEOF(*s) ) { case PIKE_T_ARRAY: res = sizeof( struct array ); @@ -7713,7 +7713,7 @@ static void f__size_object( INT32 UNUSED(args) ) struct object *o; struct program *p; struct mapping *map = NULL; - if( Pike_sp[-1].type != PIKE_T_OBJECT ) + if( TYPEOF(Pike_sp[-1]) != PIKE_T_OBJECT ) Pike_error("Expected an object as argument\n"); o = Pike_sp[-1].u.object; @@ -7729,7 +7729,7 @@ static void f__size_object( INT32 UNUSED(args) ) if( (fun = low_find_lfun( p, LFUN__SIZE_OBJECT)) != -1 ) { apply_low( o, fun, 0 ); - if( Pike_sp[-1].type == PIKE_T_INT ) + if( TYPEOF(Pike_sp[-1]) == PIKE_T_INT ) sum += Pike_sp[-1].u.integer; pop_stack(); } @@ -9457,7 +9457,7 @@ PMOD_EXPORT void f_program_identifier_defined(INT32 args) if( !(p = program_from_svalue(Pike_sp-args)) ) Pike_error("Illegal argument 1 to defined(program,string)\n"); - if( Pike_sp[-args+1].type != PIKE_T_STRING ) + if( TYPEOF(Pike_sp[1-args]) != PIKE_T_STRING ) Pike_error("Illegal argument 2 to defined(program,string)\n"); else ident = Pike_sp[-args+1].u.string; diff --git a/src/interpret_functions.h b/src/interpret_functions.h index 0db899384e8637567950e3b783d150bcd64d860b..d8cd89e95d6e36b6027b99cecf2a26a274494dab 100644 --- a/src/interpret_functions.h +++ b/src/interpret_functions.h @@ -505,13 +505,14 @@ OPCODE2(F_ADD_LOCALS_AND_POP, "local += local", 0, { struct svalue *dst = Pike_fp->locals+arg1; struct svalue *src = Pike_fp->locals+arg2; - if( (dst->type|src->type) == PIKE_T_INT + /* NB: The following test only works because PIKE_T_INT == 0! */ + if( (TYPEOF(*dst)|TYPEOF(*src)) == PIKE_T_INT && !INT_TYPE_ADD_OVERFLOW(src->u.integer,dst->u.integer) ) { SET_SVAL_SUBTYPE(*dst,NUMBER_NUMBER); dst->u.integer += src->u.integer; } - else if( dst->type == src->type && dst->type == PIKE_T_STRING ) + else if(TYPEOF(*dst) == TYPEOF(*src) && TYPEOF(*dst) == PIKE_T_STRING ) { struct pike_string *srcs = src->u.string; struct pike_string *dsts = dst->u.string; @@ -548,7 +549,7 @@ OPCODE2(F_ADD_LOCALS_AND_POP, "local += local", 0, OPCODE2(F_ADD_LOCAL_INT_AND_POP, "local += number", 0,{ struct svalue *dst = Pike_fp->locals+arg1; - if( dst->type == PIKE_T_INT + if( TYPEOF(*dst) == PIKE_T_INT && !INT_TYPE_ADD_OVERFLOW(dst->u.integer,arg2) ) { SET_SVAL_SUBTYPE(*dst,NUMBER_NUMBER); @@ -566,7 +567,7 @@ OPCODE2(F_ADD_LOCAL_INT_AND_POP, "local += number", 0,{ OPCODE2(F_ADD_LOCAL_INT, "local += number local", 0,{ struct svalue *dst = Pike_fp->locals+arg1; - if( dst->type == PIKE_T_INT + if( TYPEOF(*dst) == PIKE_T_INT && !INT_TYPE_ADD_OVERFLOW(dst->u.integer,arg2) ) { SET_SVAL_SUBTYPE(*dst,NUMBER_NUMBER); diff --git a/src/post_modules/CritBit/critbit/value_svalue.h b/src/post_modules/CritBit/critbit/value_svalue.h index 4cb573db3e7a0096de53a92b633ead1a4e5c0bb5..a230b770fe3d48398d91b1c9e52965f5db7f16aa 100644 --- a/src/post_modules/CritBit/critbit/value_svalue.h +++ b/src/post_modules/CritBit/critbit/value_svalue.h @@ -12,8 +12,8 @@ typedef struct svalue CB_NAME(value); #define CB_SET_VALUE(node, v) assign_svalue(&((node)->value), (v)) #define CB_GET_VALUE(node, v) assign_svalue_no_free((v), &((node)->value)) #define CB_FREE_VALUE(v) free_svalue(v) -#define CB_HAS_VALUE(node) ((node)->value.type != T_VOID) -#define CB_INIT_VALUE(node) do { (node)->value.type = T_VOID; } while(0) +#define CB_HAS_VALUE(node) (TYPEOF((node)->value) != T_VOID) +#define CB_INIT_VALUE(node) do { SET_SVAL_TYPE((node)->value, T_VOID); } while(0) #define CB_RM_VALUE(node) do { if (CB_HAS_VALUE(node)) \ free_svalue(&((node)->value)); CB_INIT_VALUE(node); } while(0) #define CB_PUSH_VALUE(v) push_svalue(&(v)) diff --git a/src/post_modules/CritBit/iterator_source.H b/src/post_modules/CritBit/iterator_source.H index 2d5b548cddad9daf35ba481bb89fe5113f3254f4..399b9de29df7e8a6bf0e8804e388aee50d22ccdb 100644 --- a/src/post_modules/CritBit/iterator_source.H +++ b/src/post_modules/CritBit/iterator_source.H @@ -32,7 +32,7 @@ } INIT { - THIS->lastval.type = T_VOID; + SET_SVAL_TYPE(THIS->lastval, T_VOID); THIS->lastnode = NULL; THIS->step = 1; THIS->stop.len.chars = 0; @@ -164,7 +164,7 @@ apply_low(tree, encode_fun, 1); assign_svalue(stop, Pike_sp-1); pop_stack(); - if (!((1<<stop->type) & T_KEY)) + if (!((1<<TYPEOF(*stop)) & T_KEY)) SIMPLE_BAD_ARG_ERROR("create", 3, cmod_STRFY_EVAL(key_ptype)); } THIS->stop = CB_LOW_KEY_FROM_SVALUE(stop); @@ -179,7 +179,7 @@ apply_low(tree, encode_fun, 1); assign_svalue(start, Pike_sp-1); pop_stack(); - if (!((1<<start->type) & T_KEY)) + if (!((1<<TYPEOF(*start)) & T_KEY)) SIMPLE_BAD_ARG_ERROR("create", 2, cmod_STRFY_EVAL(key_ptype)); } s = CB_LOW_KEY_FROM_SVALUE(start); diff --git a/src/post_modules/CritBit/tree_header.H b/src/post_modules/CritBit/tree_header.H index eda717d335f35963854f67951bec5405524e9382..33e3cd31cc556dff65e2d8adde669d4562e136ed 100644 --- a/src/post_modules/CritBit/tree_header.H +++ b/src/post_modules/CritBit/tree_header.H @@ -73,7 +73,7 @@ DOCEND() #undef CB_CHECK_KEY #define CB_CHECK_KEY(svalue, fun, num) do { \ CB_TRANSFORM_KEY(svalue); \ - if (!((1<<(svalue)->type) & T_KEY)) \ + if (!((1<<TYPEOF(*svalue)) & T_KEY)) \ SIMPLE_BAD_ARG_ERROR(fun, (num), STRFY(key_ptype)); \ } while(0) #undef CB_PUSH_TRANSFORM_KEY @@ -91,12 +91,12 @@ TREE_CLASSIFY(_transform_svalue_to_key)(const struct svalue * s) { if (THIS->encode_fun >= 0) { push_svalue(s); apply_low(Pike_fp->current_object, THIS->encode_fun, 1); - if (!((1<<Pike_sp[-1].type) & T_KEY)) + if (!((1<<TYPEOF(Pike_sp[-1])) & T_KEY)) Pike_error("encode_key() is expected to return type " cmod_STRFY_EVAL(key_ptype) ".\n"); key = CB_LOW_KEY_FROM_SVALUE(Pike_sp-1); pop_stack(); } else { - if (!((1<<s->type) & T_KEY)) Pike_error("Expected type " cmod_STRFY_EVAL(key_ptype) ".\n"); + if (!((1<<TYPEOF(*s)) & T_KEY)) Pike_error("Expected type " cmod_STRFY_EVAL(key_ptype) ".\n"); key = CB_LOW_KEY_FROM_SVALUE(s); } return key; diff --git a/src/post_modules/CritBit/tree_high.c b/src/post_modules/CritBit/tree_high.c index 9c21e1b0c221c8b070ac5037e3c8f2c019403d9f..0d2464f58db145c55588687b03ba8bd1e8002b79 100644 --- a/src/post_modules/CritBit/tree_high.c +++ b/src/post_modules/CritBit/tree_high.c @@ -72,7 +72,7 @@ static inline void cb_print_node(struct string_builder * buf, cb_node_t node, int depth) { string_builder_putchars(buf, ' ', depth); string_builder_sprintf(buf, "%x #%lu (%d) --> ", node, - node->size, node->value.type); + node->size, TYPEOF(node->value)); string_builder_putchars(buf, ' ', MAXIMUM(0, 15-depth)); cb_debug_print_key(buf, node->key); if (CB_HAS_VALUE(node)) CB_PRINT_KEY(buf, node->key); diff --git a/src/post_modules/CritBit/tree_source.H b/src/post_modules/CritBit/tree_source.H index b17faadc329515e900e38ab73f12210e7f9f7b3f..ea8ef1e5bd50dacc02f297f6e29271d924927dde 100644 --- a/src/post_modules/CritBit/tree_source.H +++ b/src/post_modules/CritBit/tree_source.H @@ -101,7 +101,7 @@ cmod_DEFINE_EVAL(COPY_NODE, TREE_CLASSIFY(_copy_node)) { if (args == 1) { - switch (o->type) { + switch (TYPEOF(*o)) { case PIKE_T_MAPPING: { struct keypair *k; INT32 e; @@ -124,9 +124,9 @@ cmod_DEFINE_EVAL(COPY_NODE, TREE_CLASSIFY(_copy_node)) } return; } - } + } ARG_ERROR: - SIMPLE_BAD_ARG_ERROR("create", 1, "mapping(" cmod_STRFY_EVAL(key_ptype) ":mixed)|array"); + SIMPLE_BAD_ARG_ERROR("create", 1, "mapping(" cmod_STRFY_EVAL(key_ptype) ":mixed)|array"); } } @@ -151,7 +151,7 @@ DOCEND() push_array(a); if (CB_HAS_VALUE(node)) { s = ITEM(a)+start; - s->type = T_VOID; + SET_SVAL_TYPE(*s, T_VOID); k = node->key; CB_ASSIGN_SVALUE_KEY(k, s); start ++; @@ -162,7 +162,7 @@ DOCEND() Pike_error("super bad!! tree has hidden entries.\n"); } s = ITEM(a)+start; - s->type = T_VOID; + SET_SVAL_TYPE(*s, T_VOID); CB_ASSIGN_SVALUE_KEY(_->key, s); start ++; } @@ -286,7 +286,7 @@ DOCEND() */ PIKEFUN mixed `[](mixed key) { CB_TRANSFORM_KEY(key); - if ((1<<key->type) & T_KEY) { + if ((1 << TYPEOF(*key)) & T_KEY) { cb_node_t n; cb_key k = CB_LOW_KEY_FROM_SVALUE(key); pop_stack(); @@ -303,7 +303,7 @@ DOCEND() /*! @decl int(0..1) _equal(mixed o) */ PIKEFUN int _equal(mixed o) { - if (o->type == PIKE_T_OBJECT + if (TYPEOF(*o) == PIKE_T_OBJECT && o->u.object->prog == Pike_fp->current_object->prog) { cb_node_t tree1, tree2; tree1 = THIS->tree.root; @@ -339,7 +339,7 @@ DOCEND() struct object * res; cb_node_t node, tree = NULL; - if (o->type != PIKE_T_OBJECT || -1 + if (TYPEOF(*o) != PIKE_T_OBJECT || -1 == low_get_storage(o->u.object->prog, TREE_CLASSIFY(_program))) { SIMPLE_BAD_ARG_ERROR("`-", 1, "CritBit." cmod_STRFY_EVAL(tree_class)); } @@ -372,7 +372,7 @@ DOCEND() PIKEFUN mixed `+(mixed o) { cb_node_t tree1, tree2; - if (o->type != PIKE_T_OBJECT || -1 + if (TYPEOF(*o) != PIKE_T_OBJECT || -1 == low_get_storage(o->u.object->prog, TREE_CLASSIFY(_program))) { SIMPLE_BAD_ARG_ERROR("`+", 1, "inherits(CritBit." cmod_STRFY_EVAL(tree_class) ")"); } diff --git a/src/post_modules/_PGsql/PGsql.cmod b/src/post_modules/_PGsql/PGsql.cmod index 679e1e54bcd0ef853ceee7fb9fa912b6639aaf35..f568f32eca1d9b0cac9e22d9d9217c607f9f2314 100644 --- a/src/post_modules/_PGsql/PGsql.cmod +++ b/src/post_modules/_PGsql/PGsql.cmod @@ -96,7 +96,7 @@ PIKECLASS PGsql if(not_all) push_int(1); apply(THISOBJ,"read",1+!!not_all); - if(Pike_sp[-1].type == PIKE_T_STRING) + if(TYPEOF(Pike_sp[-1]) == PIKE_T_STRING) { i=Pike_sp[-1].u.string->len; memcpy(a,Pike_sp[-1].u.string->str,i); } @@ -226,7 +226,7 @@ bad: { #ifdef TCP_NODELAY apply(THISOBJ,"query_fd",0); - if(Pike_sp[-1].type == PIKE_T_INT) + if(TYPEOF(Pike_sp[-1]) == PIKE_T_INT) { int fd=Pike_sp[-1].u.integer; int newval = 1; setsockopt(fd, IPPROTO_TCP, TCP_NODELAY, &newval, sizeof(newval)); @@ -336,7 +336,7 @@ outofmem: Pike_fatal("Out of memory\n"); ref_push_object(portal); ref_push_string(MK_STRING("_buffer")); f_arrow(2); - if(Pike_sp[-1].type == PIKE_T_INT) + if(TYPEOF(Pike_sp[-1]) == PIKE_T_INT) buffer=Pike_sp[-1].u.integer; pop_stack(); @@ -357,7 +357,7 @@ outofmem: Pike_fatal("Out of memory\n"); ref_push_object(portal); ref_push_string(MK_STRING("_rowsreceived")); f_arrow(2); - if(Pike_sp[-1].type != PIKE_T_INT) + if(TYPEOF(Pike_sp[-1]) != PIKE_T_INT) Pike_error("Driver needs to be fixed to support more than 2^31 rows\n"); rowsreceived=Pike_sp[-1].u.integer; pop_stack();