EXPR_LITERAL_INTEGER,
EXPR_LITERAL_FLOATINGPOINT,
EXPR_LITERAL_CHARACTER,
- EXPR_LITERAL_WIDE_CHARACTER,
EXPR_LITERAL_MS_NOOP, /**< MS __noop extension */
EXPR_STRING_LITERAL,
EXPR_COMPOUND_LITERAL,
* integer, float and boolean constants
*/
struct literal_expression_t {
- expression_base_t base;
- string_t value;
- string_t suffix;
+ expression_base_t base;
+ string_t value;
+ char const *suffix; /**< Start of the suffix in value. */
/* ast2firm data */
- ir_tarval *target_value;
+ ir_tarval *target_value;
};
/**
* string and character literals
*/
struct string_literal_expression_t {
- expression_base_t base;
- string_encoding_t encoding;
- string_t value;
+ expression_base_t base;
+ string_t value;
};
struct funcname_expression_t {
expression_base_t base;
funcname_kind_t kind;
- string_t value; /**< the value once assigned. */
};
struct compound_literal_expression_t {
INITIALIZER_VALUE,
INITIALIZER_LIST,
INITIALIZER_STRING,
- INITIALIZER_WIDE_STRING,
INITIALIZER_DESIGNATOR
} initializer_kind_t;
initializer_t *initializers[];
};
-struct initializer_string_t {
- initializer_base_t base;
- string_t string;
-};
-
-struct initializer_wide_string_t {
- initializer_base_t base;
- string_t string;
-};
-
struct initializer_designator_t {
initializer_base_t base;
designator_t *designator;
initializer_base_t base;
initializer_value_t value;
initializer_list_t list;
- initializer_string_t string;
- initializer_wide_string_t wide_string;
initializer_designator_t designator;
};
+static inline string_literal_expression_t const *get_init_string(initializer_t const *const init)
+{
+ assert(init->kind == INITIALIZER_STRING);
+ assert(init->value.value->kind == EXPR_STRING_LITERAL);
+ return &init->value.value->string_literal;
+}
+
/**
* The statement kinds.
*/