Branch: Tag:

2014-12-04

2014-12-04 19:23:12 by Henrik Grubbström (Grubba) <grubba@grubba.org>

Runtime: Improved diagnostics in -rt mode.

Also adds the string_builder_explain_*() functions, that
mirror the corresponding yyexplain_*() functions.

1080:    */    struct pike_type *sval_type = get_type_of_svalue(s);    struct pike_string *t1; -  struct pike_string *t2; +  struct string_builder s;    char *fname = "__soft-cast"; -  +  ONERROR tmp0;    ONERROR tmp1; -  ONERROR tmp2; +     -  +  init_string_builder(&s, 0); +  +  SET_ONERROR(tmp0, free_string_builder, &s); +  +  string_builder_explain_nonmatching_types(&s, type, sval_type); +     if (Pike_fp->current_program) {    /* Look up the function-name */    struct pike_string *name =
1096:    t1 = describe_type(type);    SET_ONERROR(tmp1, do_free_string, t1);    -  t2 = describe_type(sval_type); -  SET_ONERROR(tmp2, do_free_string, t2); -  +     free_type(sval_type);       bad_arg_error(NULL, Pike_sp-1, 1, 1, t1->str, Pike_sp-1, -  "%s(): Soft cast failed. Expected %s, got %s\n", -  fname, t1->str, t2->str); +  "%s(): Soft cast failed.\n%S", +  fname, s.s);    /* NOT_REACHED */ -  UNSET_ONERROR(tmp2); -  UNSET_ONERROR(tmp1); -  free_string(t2); -  free_string(t1); +  CALL_AND_UNSET_ONERROR(tmp1); +  CALL_AND_UNSET_ONERROR(tmp0);    }   }