diff options
Diffstat (limited to 'tapsets.cxx')
-rw-r--r-- | tapsets.cxx | 23 |
1 files changed, 16 insertions, 7 deletions
diff --git a/tapsets.cxx b/tapsets.cxx index b99e570f..632bd389 100644 --- a/tapsets.cxx +++ b/tapsets.cxx @@ -892,11 +892,11 @@ dwflpp string prelude, postlude; switch (typetag) { - default: - throw semantic_error ("target location not a base or pointer type"); + throw semantic_error ("unsupported type tag " + + lex_cast<string>(typetag)); break; - + case DW_TAG_base_type: ty = pe_long; c_translate_fetch (&pool, 1, module_bias, die, typedie, &tail, @@ -1715,10 +1715,19 @@ var_expanding_copy_visitor::visit_target_symbol (target_symbol *e) functiondecl *fdecl = new functiondecl; embeddedcode *ec = new embeddedcode; ec->tok = e->tok; - ec->code = q.dw.literal_stmt_for_local(addr, - e->base_name.substr(1), - e->components, - fdecl->type); + try + { + ec->code = q.dw.literal_stmt_for_local(addr, + e->base_name.substr(1), + e->components, + fdecl->type); + } + catch (const semantic_error& er) + { + semantic_error er2 (er); + er2.tok1 = e->tok; + throw er2; + } fdecl->name = fname; fdecl->body = ec; q.sess.functions.push_back(fdecl); |