[vala/wip/gtimezone: 1/2] codegen: Emit external creation methods in bindings




commit b77caccca5c8399a58536ba1eece97324277feb8
Author: Rico Tzschichholz <ricotz ubuntu com>
Date:   Wed Apr 7 18:14:16 2021 +0200

    codegen: Emit external creation methods in bindings
    
    These must be chained up to an existing constructor of the parent symbol

 codegen/valaccodebasemodule.vala   | 12 ++++++++++++
 codegen/valaccodemethodmodule.vala |  2 +-
 2 files changed, 13 insertions(+), 1 deletion(-)
---
diff --git a/codegen/valaccodebasemodule.vala b/codegen/valaccodebasemodule.vala
index fc25b327f..c52c5da0a 100644
--- a/codegen/valaccodebasemodule.vala
+++ b/codegen/valaccodebasemodule.vala
@@ -4938,6 +4938,18 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
 
                        generate_method_declaration (m, cfile);
 
+                       if (m is CreationMethod && !m.external && m.external_package) {
+                               unowned CreationMethod cm = (CreationMethod) m;
+                               if (!cm.chain_up) {
+                                       Report.error (cm.source_reference, "internal: Creation method 
implementation in binding must be chained up");
+                               }
+                               // internal VAPI creation methods
+                               // only add them once per source file
+                               if (add_generated_external_symbol (cm)) {
+                                       visit_creation_method (cm);
+                               }
+                       }
+
                        unowned Class? cl = expr.type_reference.type_symbol as Class;
 
                        if (!get_ccode_has_new_function (m)) {
diff --git a/codegen/valaccodemethodmodule.vala b/codegen/valaccodemethodmodule.vala
index 944d6a00a..deb9dba65 100644
--- a/codegen/valaccodemethodmodule.vala
+++ b/codegen/valaccodemethodmodule.vala
@@ -1241,7 +1241,7 @@ public abstract class Vala.CCodeMethodModule : CCodeStructModule {
                visit_method (m);
                ellipses_to_valist = false;
 
-               if (m.source_type == SourceFileType.FAST) {
+               if ((!m.external && m.external_package) || m.source_type == SourceFileType.FAST) {
                        pop_line ();
                        return;
                }


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]