]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
codegen: Add convenience load_this_parameter() method
authorLuca Bruno <lucabru@src.gnome.org>
Sun, 6 Mar 2011 15:49:07 +0000 (16:49 +0100)
committerJürg Billeter <j@bitron.ch>
Thu, 10 Mar 2011 18:28:43 +0000 (19:28 +0100)
codegen/valaccodebasemodule.vala
codegen/valaccodememberaccessmodule.vala

index 3a464c43da373fa3192cb9054a3deacaf40fdb12..83f96f4dd930f2a8220551d6f60ece8c78e15066 100644 (file)
@@ -3721,6 +3721,8 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
 
        public abstract TargetValue get_field_cvalue (Field field, TargetValue? instance);
 
+       public abstract TargetValue load_this_parameter (TypeSymbol sym);
+
        public virtual string get_delegate_target_cname (string delegate_cname) {
                assert_not_reached ();
        }
index 991319dc92b59d9c2ce3c8e397cba21a30c9d883..285c09a717a567cbe3c5fa98ac9072f04cc3cfff 100644 (file)
@@ -402,7 +402,7 @@ public abstract class Vala.CCodeMemberAccessModule : CCodeControlFlowModule {
                                // use closure
                                result.cvalue = new CCodeMemberAccess.pointer (new CCodeIdentifier ("data"), "self");
                        } else {
-                               var st = current_type_symbol as Struct;
+                               var st = result.value_type.data_type as Struct;
                                if (st != null && !st.is_simple_type ()) {
                                        result.cvalue = new CCodeIdentifier ("(*self)");
                                } else {
@@ -678,6 +678,12 @@ public abstract class Vala.CCodeMemberAccessModule : CCodeControlFlowModule {
                return load_variable (param, get_parameter_cvalue (param));
        }
 
+       /* Convenience method returning access to "this" */
+       public override TargetValue load_this_parameter (TypeSymbol sym) {
+               var param = new Parameter ("this", get_data_type_for_symbol (sym));
+               return load_parameter (param);
+       }
+
        /* Returns unowned access to the given field */
        public override TargetValue load_field (Field field, TargetValue? instance) {
                return load_variable (field, get_field_cvalue (field, instance));