expr.ccodenode = new CCodeIdentifier (f.get_cname ());
}
+ } else if (expr.symbol_reference is EnumValue) {
+ var ev = (EnumValue) expr.symbol_reference;
+
+ generate_enum_declaration ((Enum) ev.parent_symbol, source_declarations);
+
+ expr.ccodenode = new CCodeConstant (ev.get_cname ());
} else if (expr.symbol_reference is Constant) {
var c = (Constant) expr.symbol_reference;
ccomma.append_expression (ctemp);
expr.ccodenode = ccomma;
}
- } else if (expr.symbol_reference is EnumValue) {
- var ev = (EnumValue) expr.symbol_reference;
-
- generate_enum_declaration ((Enum) ev.parent_symbol, source_declarations);
-
- expr.ccodenode = new CCodeConstant (ev.get_cname ());
} else if (expr.symbol_reference is LocalVariable) {
var local = (LocalVariable) expr.symbol_reference;
if (local.is_result) {
expr.ccodenode = new CCodeIdentifier (f.get_cname ());
}
+ } else if (expr.symbol_reference is EnumValue) {
+ var ev = (EnumValue) expr.symbol_reference;
+
+ generate_enum_declaration ((Enum) ev.parent_symbol, source_declarations);
+
+ expr.ccodenode = new CCodeConstant (ev.get_cname ());
} else if (expr.symbol_reference is Constant) {
var c = (Constant) expr.symbol_reference;
}
expr.ccodenode = ccall;
- } else if (expr.symbol_reference is EnumValue) {
- var ev = (EnumValue) expr.symbol_reference;
-
- generate_enum_declaration ((Enum) ev.parent_symbol, source_declarations);
-
- expr.ccodenode = new CCodeConstant (ev.get_cname ());
} else if (expr.symbol_reference is LocalVariable) {
var local = (LocalVariable) expr.symbol_reference;
if (local.is_result) {
* @param source_reference reference to source code
* @return newly created constant
*/
- public Constant (string name, DataType type_reference, Expression? value, SourceReference? source_reference, Comment? comment = null) {
+ public Constant (string name, DataType? type_reference, Expression? value, SourceReference? source_reference, Comment? comment = null) {
base (name, source_reference, comment);
- this.type_reference = type_reference;
+ if (type_reference != null) {
+ this.type_reference = type_reference;
+ }
this.value = value;
}
*
* @return the name to be used in C code by default
*/
- public string get_default_cname () {
+ public virtual string get_default_cname () {
if (parent_symbol == null) {
// global constant
return name;
}
}
+ public void set_cname (string value) {
+ this.cname = value;
+ }
+
public bool get_lock_used () {
return lock_used;
}
/* valaenumvalue.vala
*
- * Copyright (C) 2006-2009 Jürg Billeter
+ * Copyright (C) 2006-2010 Jürg Billeter
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
/**
* Represents an enum member in the source code.
*/
-public class Vala.EnumValue : Symbol {
- /**
- * Specifies the numerical representation of this enum value.
- */
- public Expression value { get; set; }
-
- private string cname;
-
- /**
- * Creates a new enum value.
- *
- * @param name enum value name
- * @return newly created enum value
- */
- public EnumValue (string name, SourceReference? source_reference = null, Comment? comment = null) {
- base (name, source_reference);
- this.comment = comment;
- }
-
+public class Vala.EnumValue : Constant {
/**
* Creates a new enum value with the specified numerical representation.
*
* @param value numerical representation
* @return newly created enum value
*/
- public EnumValue.with_value (string name, Expression value, SourceReference? source_reference = null, Comment? comment = null) {
- this (name, source_reference, comment);
- this.value = value;
+ public EnumValue (string name, Expression? value, SourceReference? source_reference = null, Comment? comment = null) {
+ base (name, null, value, source_reference, comment);
}
/**
}
}
- /**
- * Process all associated attributes.
- */
- public void process_attributes () {
- foreach (Attribute a in attributes) {
- if (a.name == "CCode" && a.has_argument("cname")) {
- cname = a.get_string ("cname");
- } else if (a.name == "Deprecated") {
- process_deprecated_attribute (a);
- }
- }
- }
-
- /**
- * Returns the name of this enum value as it is used in C code.
- *
- * @return the name to be used in C code
- */
- public string get_cname () {
- if (cname == null) {
- cname = get_default_cname ();
- }
- return cname;
- }
-
- public string get_default_cname () {
+ public override string get_default_cname () {
var en = (Enum) parent_symbol;
return "%s%s".printf (en.get_cprefix (), name);
}
- /**
- * Sets the name of this enum value to be used in C code.
- *
- * @param cname the name to be used in C code
- */
- public void set_cname (string cname) {
- this.cname = cname;
- }
-
public override bool check (SemanticAnalyzer analyzer) {
if (checked) {
return !error;
var value_begin = get_location ();
string id = parse_identifier ();
comment = scanner.pop_comment ();
- var ev = new EnumValue (id, get_src (value_begin), comment);
- set_attributes (ev, value_attrs);
-
+
+ Expression value = null;
if (accept (TokenType.ASSIGN)) {
- ev.value = parse_expression ();
+ value = parse_expression ();
}
+
+ var ev = new EnumValue (id, value, get_src (value_begin), comment);
+ set_attributes (ev, value_attrs);
+
en.add_value (ev);
expect (TokenType.EOL);
} while (true);
EnumValue parse_enumeration_member () {
start_element ("member");
- var ev = new EnumValue (string.joinv ("_", reader.get_attribute ("name").up ().split ("-")));
+ var ev = new EnumValue (string.joinv ("_", reader.get_attribute ("name").up ().split ("-")), null);
ev.set_cname (reader.get_attribute ("c:identifier"));
next ();
end_element ("member");
}
public override bool is_constant () {
- if (symbol_reference is Constant || symbol_reference is EnumValue) {
+ if (symbol_reference is Constant) {
return true;
} else {
return false;
var value_begin = get_location ();
string id = parse_identifier ();
comment = scanner.pop_comment ();
- var ev = new EnumValue (id, get_src (value_begin), comment);
- set_attributes (ev, value_attrs);
+
+ Expression value = null;
if (accept (TokenType.ASSIGN)) {
- ev.value = parse_expression ();
+ value = parse_expression ();
}
+
+ var ev = new EnumValue (id, value, get_src (value_begin), comment);
+ set_attributes (ev, value_attrs);
en.add_value (ev);
} while (accept (TokenType.COMMA));
if (accept (TokenType.SEMICOLON)) {
type.value_owned = false;
}
return type;
+ } else if (sym is EnumValue) {
+ return new EnumValueType ((Enum) sym.parent_symbol);
} else if (sym is Constant) {
var c = (Constant) sym;
return c.type_reference;
type.value_owned = false;
}
return type;
- } else if (sym is EnumValue) {
- return new EnumValueType ((Enum) sym.parent_symbol);
} else if (sym is Method) {
return new MethodType ((Method) sym);
} else if (sym is Signal) {
}
if (!is_hidden) {
- var ev = new EnumValue (value2.name.offset (common_prefix.len ()));
+ var ev = new EnumValue (value2.name.offset (common_prefix.len ()), null);
en.add_value (ev);
}
}