From 7c56794fa53f14bac3316d0b3018180f257e30a5 Mon Sep 17 00:00:00 2001 From: Paul Gofman Date: Fri, 19 Apr 2024 13:03:36 -0600 Subject: [PATCH] wineopenxr: Support function pointer definition with paramaters specified as plain element text. To handle PFN_xrCreateApiLayerInstance definition in the up to date registry XML which does that. CW-Bug-Id: #23689 --- wineopenxr/make_openxr | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/wineopenxr/make_openxr b/wineopenxr/make_openxr index 01fc8564..3ca54f24 100755 --- a/wineopenxr/make_openxr +++ b/wineopenxr/make_openxr @@ -770,11 +770,12 @@ class XrFunction(object): class XrFunctionPointer(object): - def __init__(self, _type, name, members): + def __init__(self, _type, name, members, params_text): self.name = name self.members = members self.type = _type self.required = False + self.params_text = params_text @staticmethod def from_xml(funcpointer): @@ -811,7 +812,19 @@ class XrFunctionPointer(object): _type = funcpointer.text name = funcpointer.find("name").text - return XrFunctionPointer(_type, name, members) + params_text = None + if members == []: + index = 0 + for elem_part in funcpointer.itertext(): + index = index + 1 + if index == 3: + p = re.findall(r'\([^)]*\)', elem_part) + params_text = next(iter(p), None) + if params_text: + params_text = params_text[1:-1] + break + + return XrFunctionPointer(_type, name, members, params_text) def definition(self): text = "{0} {1})(\n".format(self.type, self.name) @@ -824,6 +837,8 @@ class XrFunctionPointer(object): first = False else: text += ",\n " + m.definition() + elif self.params_text is not None: + text += self.params_text else: # Just make the compiler happy by adding a void parameter. text += "void"