static awk_value_t * test_scalar_reserved(int nargs, awk_value_t *result) { awk_value_t new_value; awk_value_t the_scalar; (void) nargs; /* silence warnings */ make_number(0.0, result); /* look up a reserved variable - should pass */ if (sym_lookup("ARGC", AWK_SCALAR, & the_scalar)) { printf("test_scalar_reserved: sym_lookup of ARGC passed - got a value!\n"); } else { printf("test_scalar_reserved: sym_lookup of ARGC failed - did not get a value\n"); goto out; } /* updating it should fail */ make_number(42.0, & new_value); if (! sym_update_scalar(the_scalar.scalar_cookie, & new_value)) { printf("test_scalar_reserved: could not update new_value2 for ARGC - pass\n"); } else { printf("test_scalar_reserved: was able to update new_value2 for ARGC - fail\n"); goto out; } make_number(1.0, result); out: return result; }
static awk_value_t * test_scalar(int nargs, awk_value_t *result) { awk_value_t new_value, new_value2; awk_value_t the_scalar; (void) nargs; /* silence warnings */ make_number(0.0, result); if (! sym_lookup("the_scalar", AWK_SCALAR, & the_scalar)) { printf("test_scalar: could not get scalar cookie\n"); goto out; } if (! get_argument(0, AWK_UNDEFINED, & new_value)) { printf("test_scalar: could not get argument\n"); goto out; } else if (new_value.val_type != AWK_STRING && new_value.val_type != AWK_NUMBER) { printf("test_scalar: argument is not a scalar\n"); goto out; } if (new_value.val_type == AWK_STRING) { make_const_string(new_value.str_value.str, new_value.str_value.len, & new_value2); } else { new_value2 = new_value; } if (! sym_update_scalar(the_scalar.scalar_cookie, & new_value2)) { printf("test_scalar: could not update new_value2!\n"); goto out; } make_number(1.0, result); out: return result; }
/* update MPFR_EXACT value */ static inline void set_exact(double x) { awk_value_t val; sym_update_scalar(MPFR_EXACT_node, make_number(x, &val)); }