summaryrefslogtreecommitdiff
path: root/ccode/valaccodevariabledeclarator.vala
diff options
context:
space:
mode:
authorSimon <simon.werbeck@gmail.com>2014-03-13 22:48:40 +0100
committerLuca Bruno <lucabru@src.gnome.org>2014-03-30 12:04:37 +0200
commit5938a38bff40e311885c1ebed37991f2e0c9c600 (patch)
treea1df8c955aef3d70fa3ef5f7da89d599b64cbae2 /ccode/valaccodevariabledeclarator.vala
parentd9dff687875a2ae033719799d8a77487917bd159 (diff)
downloadvala-5938a38bff40e311885c1ebed37991f2e0c9c600.tar.gz
Support non-literal length in fixed-size arrays
Now any constant integer expression can be used as length for fixed-size arrays. Fixes bug 638993
Diffstat (limited to 'ccode/valaccodevariabledeclarator.vala')
-rw-r--r--ccode/valaccodevariabledeclarator.vala37
1 files changed, 32 insertions, 5 deletions
diff --git a/ccode/valaccodevariabledeclarator.vala b/ccode/valaccodevariabledeclarator.vala
index 863ec83a3..c8dd87495 100644
--- a/ccode/valaccodevariabledeclarator.vala
+++ b/ccode/valaccodevariabledeclarator.vala
@@ -39,7 +39,7 @@ public class Vala.CCodeVariableDeclarator : CCodeDeclarator {
/**
* The optional declarator suffix.
*/
- public string? declarator_suffix { get; set; }
+ public CCodeDeclaratorSuffix? declarator_suffix { get; set; }
/**
* Initializer only used to zero memory, safe to initialize as part
@@ -47,13 +47,13 @@ public class Vala.CCodeVariableDeclarator : CCodeDeclarator {
*/
public bool init0 { get; set; }
- public CCodeVariableDeclarator (string name, CCodeExpression? initializer = null, string? declarator_suffix = null) {
+ public CCodeVariableDeclarator (string name, CCodeExpression? initializer = null, CCodeDeclaratorSuffix? declarator_suffix = null) {
this.name = name;
this.initializer = initializer;
this.declarator_suffix = declarator_suffix;
}
- public CCodeVariableDeclarator.zero (string name, CCodeExpression? initializer, string? declarator_suffix = null) {
+ public CCodeVariableDeclarator.zero (string name, CCodeExpression? initializer, CCodeDeclaratorSuffix? declarator_suffix = null) {
this.name = name;
this.initializer = initializer;
this.declarator_suffix = declarator_suffix;
@@ -62,8 +62,9 @@ public class Vala.CCodeVariableDeclarator : CCodeDeclarator {
public override void write (CCodeWriter writer) {
writer.write_string (name);
+
if (declarator_suffix != null) {
- writer.write_string (declarator_suffix);
+ declarator_suffix.write (writer);
}
if (initializer != null) {
@@ -74,8 +75,9 @@ public class Vala.CCodeVariableDeclarator : CCodeDeclarator {
public override void write_declaration (CCodeWriter writer) {
writer.write_string (name);
+
if (declarator_suffix != null) {
- writer.write_string (declarator_suffix);
+ declarator_suffix.write (writer);
}
if (initializer != null && init0) {
@@ -97,3 +99,28 @@ public class Vala.CCodeVariableDeclarator : CCodeDeclarator {
}
}
}
+
+public class Vala.CCodeDeclaratorSuffix {
+ public bool array;
+ public CCodeExpression? array_length;
+ public bool deprecated;
+
+ public CCodeDeclaratorSuffix.with_array (CCodeExpression? array_length = null) {
+ this.array_length = array_length;
+ array = true;
+ }
+
+ public void write (CCodeWriter writer) {
+ if (array) {
+ writer.write_string ("[");
+ if (array_length != null) {
+ array_length.write (writer);
+ }
+ writer.write_string ("]");
+ }
+
+ if (deprecated) {
+ writer.write_string (" G_GNUC_DEPRECATED");
+ }
+ }
+}