Not really necessary as the errors are usually more cryptic, but nice to have when it fails there.
Signed-off-by: Rémi Bernon rbernon@codeweavers.com ---
This series is just implementing a little better support of WinRT-style interfaces in idl files, required for cleaner stubbing of some WinRT dlls, which are in turn, necessary for some recent games to even start.
Namely, Death Stranding requires windows.gaming.input.dll, and Flight Simulator requires windows.media.speech.dll, where some simple stubs are enough to make both happy.
tools/widl/parser.y | 10 ++++++++-- tools/widl/widltypes.h | 1 + 2 files changed, 9 insertions(+), 2 deletions(-)
diff --git a/tools/widl/parser.y b/tools/widl/parser.y index 3ef8d89ba1c..98bd8949f13 100644 --- a/tools/widl/parser.y +++ b/tools/widl/parser.y @@ -118,7 +118,7 @@ static statement_list_t *append_statements(statement_list_t *, statement_list_t static attr_list_t *append_attribs(attr_list_t *, attr_list_t *);
static struct namespace global_namespace = { - NULL, NULL, LIST_INIT(global_namespace.entry), LIST_INIT(global_namespace.children) + NULL, NULL, NULL, LIST_INIT(global_namespace.entry), LIST_INIT(global_namespace.children) };
static struct namespace *current_namespace = &global_namespace; @@ -1833,6 +1833,12 @@ static void push_namespace(const char *name) if(!namespace) { namespace = xmalloc(sizeof(*namespace)); namespace->name = xstrdup(name); + if (!current_namespace->full_name) namespace->full_name = xstrdup(name); + else + { + namespace->full_name = xmalloc(strlen(current_namespace->full_name) + strlen(name) + 1); + sprintf(namespace->full_name, "%s.%s", current_namespace->full_name, name); + } namespace->parent = current_namespace; list_add_tail(¤t_namespace->children, &namespace->entry); list_init(&namespace->children); @@ -1961,7 +1967,7 @@ static type_t *find_type_or_error(const char *name, int t) { type_t *type = find_type(name, NULL, t); if (!type) { - error_loc("type '%s' not found\n", name); + error_loc("type '%s' not found in %s\n", name, current_namespace->full_name); return NULL; } return type; diff --git a/tools/widl/widltypes.h b/tools/widl/widltypes.h index 085a0ff55f5..1634f9bd50b 100644 --- a/tools/widl/widltypes.h +++ b/tools/widl/widltypes.h @@ -409,6 +409,7 @@ struct alias_details
struct namespace { const char *name; + char *full_name; struct namespace *parent; struct list entry; struct list children;