From 0478498ebaf5009b757c20aea77e582897f993ae Mon Sep 17 00:00:00 2001
From: tritao <joao@tritao.eu>
Date: Fri, 18 Apr 2025 00:50:08 +0100
Subject: [PATCH] Ignore functions returning tag types for now in JS
 generation.

---
 src/Generator/Options.cs                  | 2 ++
 src/Generator/Passes/CheckIgnoredDecls.cs | 8 ++++++++
 2 files changed, 10 insertions(+)

diff --git a/src/Generator/Options.cs b/src/Generator/Options.cs
index 0d9a0008..1c078b47 100644
--- a/src/Generator/Options.cs
+++ b/src/Generator/Options.cs
@@ -205,6 +205,8 @@ namespace CppSharp
 
         public bool IsCLIGenerator => GeneratorKind == GeneratorKind.CLI;
 
+        public bool IsJSGenerator => GeneratorKind == GeneratorKind.Emscripten || GeneratorKind == GeneratorKind.QuickJS;
+
         public readonly List<string> DependentNameSpaces = new List<string>();
         public bool MarshalCharAsManagedChar { get; set; }
         public bool MarshalConstCharArrayAsString { get; set; } = true;
diff --git a/src/Generator/Passes/CheckIgnoredDecls.cs b/src/Generator/Passes/CheckIgnoredDecls.cs
index 0ebf99f1..84721f20 100644
--- a/src/Generator/Passes/CheckIgnoredDecls.cs
+++ b/src/Generator/Passes/CheckIgnoredDecls.cs
@@ -184,6 +184,14 @@ namespace CppSharp.Passes
                 return false;
             }
 
+            if (Options.IsJSGenerator && function is Method { Kind: CXXMethodKind.Normal } && ret.Type.GetFinalPointee().IsClass())
+            {
+                function.ExplicitlyIgnore();
+                Diagnostics.Debug("Function '{0}' was ignored due to {1} return decl not yet implemented in JS generators",
+                    function.Name, msg);
+                return false;
+            }
+
             foreach (var param in function.Parameters)
             {
                 if (HasInvalidDecl(param, out msg))