[vala/wip/attributes: 16/27] codegen: Add get_ccode_copy_function
- From: Luca Bruno <lucabru src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [vala/wip/attributes: 16/27] codegen: Add get_ccode_copy_function
- Date: Tue, 28 Jun 2011 13:16:55 +0000 (UTC)
commit 26c958f93ee25a3c52910d97c36054a0a55cabf4
Author: Luca Bruno <lucabru src gnome org>
Date: Tue Jun 28 09:13:20 2011 +0200
codegen: Add get_ccode_copy_function
codegen/valaccodebasemodule.vala | 27 +++++++++++++++++++++++----
codegen/valaccodestructmodule.vala | 6 +++---
2 files changed, 26 insertions(+), 7 deletions(-)
---
diff --git a/codegen/valaccodebasemodule.vala b/codegen/valaccodebasemodule.vala
index 442e5ce..f184137 100644
--- a/codegen/valaccodebasemodule.vala
+++ b/codegen/valaccodebasemodule.vala
@@ -2511,7 +2511,7 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
generate_struct_copy_function (st);
}
- var copy_call = new CCodeFunctionCall (new CCodeIdentifier (st.get_copy_function ()));
+ var copy_call = new CCodeFunctionCall (new CCodeIdentifier (get_ccode_copy_function (st)));
copy_call.add_argument (new CCodeIdentifier ("self"));
copy_call.add_argument (new CCodeIdentifier ("dup"));
ccode.add_expression (copy_call);
@@ -3735,7 +3735,7 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
var vt = (ValueType) type;
var st = (Struct) vt.type_symbol;
- var copy_call = new CCodeFunctionCall (new CCodeIdentifier (st.get_copy_function ()));
+ var copy_call = new CCodeFunctionCall (new CCodeIdentifier (get_ccode_copy_function (st)));
copy_call.add_argument (new CCodeUnaryExpression (CCodeUnaryOperator.ADDRESS_OF, cexpr));
copy_call.add_argument (new CCodeUnaryExpression (CCodeUnaryOperator.ADDRESS_OF, ctemp));
@@ -5631,6 +5631,10 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
return get_ccode_attribute(sym).ref_sink_function;
}
+ public static string get_ccode_copy_function (TypeSymbol sym) {
+ return get_ccode_attribute(sym).copy_function;
+ }
+
public override void visit_class (Class cl) {
}
@@ -5693,12 +5697,12 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
}
void generate_struct_copy_function (Struct st) {
- if (cfile.add_declaration (st.get_copy_function ())) {
+ if (cfile.add_declaration (get_ccode_copy_function (st))) {
// only generate function once per source file
return;
}
- var function = new CCodeFunction (st.get_copy_function (), "void");
+ var function = new CCodeFunction (get_ccode_copy_function (st), "void");
function.modifiers = CCodeModifiers.STATIC;
function.add_parameter (new CCodeParameter ("self", "const " + get_ccode_name (st) + "*"));
function.add_parameter (new CCodeParameter ("dest", get_ccode_name (st) + "*"));
@@ -6089,6 +6093,19 @@ public class Vala.CCodeAttribute : AttributeCache {
}
}
+ public string copy_function {
+ get {
+ if (_copy_function == null) {
+ if (sym is Struct) {
+ _copy_function = lower_case_prefix + "copy";
+ } else {
+ _copy_function = "";
+ }
+ }
+ return _copy_function;
+ }
+ }
+
private string _name;
private string _const_name;
private string _type_name;
@@ -6100,6 +6117,7 @@ public class Vala.CCodeAttribute : AttributeCache {
private bool? _ref_function_void;
private string _unref_function;
private string _ref_sink_function;
+ private string _copy_function;
public CCodeAttribute (CodeNode node) {
this.node = node;
@@ -6129,6 +6147,7 @@ public class Vala.CCodeAttribute : AttributeCache {
}
_unref_function = attr.get_string ("unref_function");
_ref_sink_function = attr.get_string ("ref_sink_function");
+ _copy_function = attr.get_string ("copy_function");
}
}
diff --git a/codegen/valaccodestructmodule.vala b/codegen/valaccodestructmodule.vala
index 13254c8..9df2690 100644
--- a/codegen/valaccodestructmodule.vala
+++ b/codegen/valaccodestructmodule.vala
@@ -128,7 +128,7 @@ public abstract class Vala.CCodeStructModule : CCodeBaseModule {
decl_space.add_function_declaration (function);
if (st.is_disposable ()) {
- function = new CCodeFunction (st.get_copy_function (), "void");
+ function = new CCodeFunction (get_ccode_copy_function (st), "void");
if (st.is_private_symbol ()) {
function.modifiers = CCodeModifiers.STATIC;
}
@@ -201,7 +201,7 @@ public abstract class Vala.CCodeStructModule : CCodeBaseModule {
ccode.add_assignment (new CCodeIdentifier ("dup"), creation_call);
if (st.is_disposable ()) {
- var copy_call = new CCodeFunctionCall (new CCodeIdentifier (st.get_copy_function ()));
+ var copy_call = new CCodeFunctionCall (new CCodeIdentifier (get_ccode_copy_function (st)));
copy_call.add_argument (new CCodeIdentifier ("self"));
copy_call.add_argument (new CCodeIdentifier ("dup"));
ccode.add_expression (copy_call);
@@ -251,7 +251,7 @@ public abstract class Vala.CCodeStructModule : CCodeBaseModule {
}
void add_struct_copy_function (Struct st) {
- var function = new CCodeFunction (st.get_copy_function (), "void");
+ var function = new CCodeFunction (get_ccode_copy_function (st), "void");
if (st.access == SymbolAccessibility.PRIVATE) {
function.modifiers = CCodeModifiers.STATIC;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]