static unsigned get_expression_precedence(expression_kind_t kind)
{
static const unsigned prec[] = {
- [EXPR_INVALID] = PREC_PRIMARY,
[EXPR_REFERENCE] = PREC_PRIMARY,
[EXPR_REFERENCE_ENUM_VALUE] = PREC_PRIMARY,
[EXPR_LITERAL_INTEGER] = PREC_PRIMARY,
case EXPR_STATEMENT:
print_statement_expression(&expression->statement);
break;
- case EXPR_INVALID:
- panic("invalid expression found");
-
-#if 0
- default:
- /* TODO */
- print_format("some expression of type %d", (int)expression->kind);
- break;
-#endif
}
if (parenthesized)
print_string(")");
case EXPR_ERROR:
return EXPR_CLASS_ERROR;
- case EXPR_INVALID:
- panic("invalid expression found");
default:
return EXPR_CLASS_VARIABLE;
case EXPR_ERROR:
return EXPR_CLASS_ERROR;
- case EXPR_INVALID:
- panic("invalid expression found");
default:
return EXPR_CLASS_VARIABLE;
case EXPR_ERROR:
return EXPR_CLASS_ERROR;
- case EXPR_INVALID:
- panic("invalid expression found");
default:
return EXPR_CLASS_VARIABLE;
case EXPR_ERROR:
return EXPR_CLASS_ERROR;
- case EXPR_INVALID:
- break;
}
panic("invalid expression found (is constant expression)");
}
case EXPR_ERROR:
return error_to_firm(expression);
- case EXPR_INVALID:
- break;
}
panic("invalid expression found");
}
* Expression kinds.
*/
typedef enum expression_kind_t {
- EXPR_INVALID = 0,
- EXPR_ERROR,
+ EXPR_ERROR = 1,
EXPR_REFERENCE,
EXPR_REFERENCE_ENUM_VALUE,
EXPR_LITERAL_BOOLEAN,
statement_t *global_asm;
};
-static inline bool is_invalid_expression(expression_t *expression)
-{
- return expression->base.kind == EXPR_INVALID;
-}
-
static inline bool is_invalid_statement(statement_t *statement)
{
return statement->base.kind == STATEMENT_INVALID;
static size_t get_expression_struct_size(expression_kind_t kind)
{
static const size_t sizes[] = {
- [EXPR_INVALID] = sizeof(expression_base_t),
[EXPR_ERROR] = sizeof(expression_base_t),
[EXPR_REFERENCE] = sizeof(reference_expression_t),
[EXPR_REFERENCE_ENUM_VALUE] = sizeof(reference_expression_t),
return;
EXPR_LITERAL_CASES
- case EXPR_INVALID:
case EXPR_ERROR:
case EXPR_STRING_LITERAL:
case EXPR_WIDE_STRING_LITERAL:
case EXPR_BUILTIN_CONSTANT_P:
case EXPR_BUILTIN_TYPES_COMPATIBLE_P:
case EXPR_OFFSETOF:
- case EXPR_INVALID:
case EXPR_ERROR:
return true;
static bool expression_has_effect(const expression_t *const expr)
{
switch (expr->kind) {
- case EXPR_ERROR:
- case EXPR_INVALID: return true; /* do NOT warn */
+ case EXPR_ERROR: return true; /* do NOT warn */
case EXPR_REFERENCE: return false;
case EXPR_REFERENCE_ENUM_VALUE: return false;
case EXPR_LABEL_ADDRESS: return false;
#include "adt/obst.h"
typedef enum type_kind_t {
- TYPE_ERROR,
+ TYPE_ERROR = 1,
TYPE_ATOMIC,
TYPE_COMPLEX,
TYPE_IMAGINARY,
case EXPR_LABEL_ADDRESS:
case EXPR_ERROR:
return;
- case EXPR_INVALID:
- break;
}
panic("invalid expr kind");
}