}
return "%s%s".printf (CCodeBaseModule.get_ccode_lower_case_prefix (sym.parent_symbol).up (), sym.name);
} else if (sym is Field) {
+ var cname = sym.name;
if (((Field) sym).binding == MemberBinding.STATIC) {
- return "%s%s".printf (CCodeBaseModule.get_ccode_lower_case_prefix (sym.parent_symbol), sym.name);
- } else {
- return sym.name;
+ cname = "%s%s".printf (CCodeBaseModule.get_ccode_lower_case_prefix (sym.parent_symbol), sym.name);
}
+ if (cname[0].isdigit ()) {
+ Report.error (node.source_reference, "Field name starts with a digit. Use the `cname' attribute to provide a valid C name if intended");
+ return "";
+ }
+ return cname;
} else if (sym is CreationMethod) {
var m = (CreationMethod) sym;
string infix;
public string get_local_cname (LocalVariable local) {
var cname = get_variable_cname (local.name);
+ if (cname[0].isdigit ()) {
+ cname = "_%s_".printf (cname);
+ }
if (is_in_coroutine ()) {
var clash_index = emit_context.closure_variable_clash_map.get (local);
if (clash_index > 0) {
objects/bug643711.vala \
objects/bug646362.vala \
objects/bug646792.vala \
+ objects/bug647018.vala \
objects/bug653138.vala \
objects/bug654702.vala \
objects/bug663134.vala \
--- /dev/null
+// allow fields starting with a digit if the cname is valid
+[CCode (cname = "good")]
+int 2good;
+
+// gets default cname - must fail
+//int 2bad;
+
+void main () {
+}
var flags = parse_member_declaration_modifiers ();
var type = parse_type (true, true);
string id = parse_identifier ();
-
type = parse_inline_array_type (type);
var f = new Field (id, type, null, get_src (begin), comment);