[vala/wip/attributes: 7/121] codegen: Add get_ccode_prefix
- From: Luca Bruno <lucabru src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [vala/wip/attributes: 7/121] codegen: Add get_ccode_prefix
- Date: Mon, 4 Jul 2011 17:09:21 +0000 (UTC)
commit f70a5b24b3672e73f361463d24a1f9404652f019
Author: Luca Bruno <lucabru src gnome org>
Date: Sun Jun 26 13:12:08 2011 +0200
codegen: Add get_ccode_prefix
codegen/valaccodebasemodule.vala | 38 +++++++++++++++++++++++++++++++++++++-
codegen/valagtypemodule.vala | 6 +++---
2 files changed, 40 insertions(+), 4 deletions(-)
---
diff --git a/codegen/valaccodebasemodule.vala b/codegen/valaccodebasemodule.vala
index f15d2a4..64a73be 100644
--- a/codegen/valaccodebasemodule.vala
+++ b/codegen/valaccodebasemodule.vala
@@ -5578,6 +5578,10 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
return get_ccode_attribute(sym).header_filenames;
}
+ public static string get_ccode_prefix (Symbol sym) {
+ return get_ccode_attribute(sym).prefix;
+ }
+
public override void visit_class (Class cl) {
}
@@ -5968,10 +5972,20 @@ public class Vala.CCodeAttribute : AttributeCache {
}
}
+ public string prefix {
+ get {
+ if (_prefix == null) {
+ _prefix = get_default_prefix ();
+ }
+ return _prefix;
+ }
+ }
+
private string _name;
private string _const_name;
private string _type_name;
private List<string> _header_filenames;
+ private string _prefix;
public CCodeAttribute (CodeNode node) {
this.node = node;
@@ -5989,6 +6003,7 @@ public class Vala.CCodeAttribute : AttributeCache {
_header_filenames.add (header);
}
}
+ _prefix = attr.get_string ("cprefix");
}
}
@@ -6041,7 +6056,7 @@ public class Vala.CCodeAttribute : AttributeCache {
} else if (sym is Signal) {
return Symbol.camel_case_to_lower_case (sym.name);
} else {
- return "%s%s".printf (sym.parent_symbol.get_cprefix (), sym.name);
+ return "%s%s".printf (get_ccode_prefix (sym.parent_symbol), sym.name);
}
} else if (node is ObjectType) {
var type = (ObjectType) node;
@@ -6137,4 +6152,25 @@ public class Vala.CCodeAttribute : AttributeCache {
return headers;
}
}
+
+ private string get_default_prefix () {
+ if (sym is ObjectTypeSymbol) {
+ return name;
+ } else if (sym is Enum || sym is ErrorDomain) {
+ return "%s_".printf (((TypeSymbol) sym).get_upper_case_cname (null));
+ } else if (sym is Namespace) {
+ if (sym.name != null) {
+ var parent_prefix = "";
+ if (sym.parent_symbol != null) {
+ parent_prefix = CCodeBaseModule.get_ccode_prefix (sym.parent_symbol);
+ }
+ return "%s%s".printf (parent_prefix, sym.name);
+ } else {
+ return "";
+ }
+ } else if (sym.name != null) {
+ return sym.name;
+ }
+ return "";
+ }
}
diff --git a/codegen/valagtypemodule.vala b/codegen/valagtypemodule.vala
index 90bcf96..e2b0cd8 100644
--- a/codegen/valagtypemodule.vala
+++ b/codegen/valagtypemodule.vala
@@ -583,11 +583,11 @@ public class Vala.GTypeModule : GErrorModule {
if (is_gtypeinstance) {
if (is_fundamental) {
- param_spec_struct = new CCodeStruct ( "_%sParamSpec%s".printf(cl.parent_symbol.get_cprefix (), cl.name));
+ param_spec_struct = new CCodeStruct ( "_%sParamSpec%s".printf(get_ccode_prefix (cl.parent_symbol), cl.name));
param_spec_struct.add_field ("GParamSpec", "parent_instance");
cfile.add_type_definition (param_spec_struct);
- cfile.add_type_declaration (new CCodeTypeDefinition ("struct %s".printf (param_spec_struct.name), new CCodeVariableDeclarator ( "%sParamSpec%s".printf(cl.parent_symbol.get_cprefix (), cl.name))));
+ cfile.add_type_declaration (new CCodeTypeDefinition ("struct %s".printf (param_spec_struct.name), new CCodeVariableDeclarator ( "%sParamSpec%s".printf(get_ccode_prefix (cl.parent_symbol), cl.name))));
gvaluecollector_h_needed = true;
@@ -909,7 +909,7 @@ public class Vala.GTypeModule : GErrorModule {
push_function (function);
- ccode.add_declaration ("%sParamSpec%s*".printf (cl.parent_symbol.get_cprefix (), cl.name), new CCodeVariableDeclarator ("spec"));
+ ccode.add_declaration ("%sParamSpec%s*".printf (get_ccode_prefix (cl.parent_symbol), cl.name), new CCodeVariableDeclarator ("spec"));
var subccall = new CCodeFunctionCall (new CCodeIdentifier ("g_type_is_a"));
subccall.add_argument (new CCodeIdentifier ("object_type"));
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]