Sfoglia il codice sorgente

Handle bare (static) name in method extraction

nosoop 10 mesi fa
parent
commit
1a0f660683
2 ha cambiato i file con 11 aggiunte e 0 eliminazioni
  1. 3 0
      src/smgdc/demangler_helpers.py
  2. 8 0
      tests/test_demangler.py

+ 3 - 0
src/smgdc/demangler_helpers.py

@@ -63,6 +63,9 @@ def extract_method_fname(node: demangler.Node) -> tuple[demangler.Node, ...]:
                 return _extract(node.value)
             case node if node.kind == "qual_name":
                 return (node.value[-1],)
+            case node if node.kind == "name":
+                # this appears to be a static function
+                return (node,)
         raise ValueError(f"Unexpected node {node!r}")
 
     if node.kind == "func":

+ 8 - 0
tests/test_demangler.py

@@ -137,6 +137,14 @@ def test_function_match_signature(fnsym_a: str, fnsym_b: str, expected: bool):
             ),
             True,
         ),
+        (
+            # FAIL: static function and class method
+            (
+                "_Z19ReloadSceneFromDiskP11CBaseEntity",
+                "_ZN18CServerChoreoTools19ReloadSceneFromDiskEi",
+            ),
+            False,
+        ),
     ],
 )
 def test_function_overloaded(fnsyms: Iterable[str], expected: bool):