return to;
}
-ExprDef *
+static ExprDef *
ExprCreate(enum expr_op_type op, enum expr_value_type type)
{
ExprDef *expr = malloc(sizeof(*expr));
return expr;
}
+ExprDef *
+ExprCreateString(xkb_atom_t str)
+{
+ ExprDef *expr = ExprCreate(EXPR_VALUE, EXPR_TYPE_STRING);
+ if (!expr)
+ return NULL;
+
+ expr->value.str = str;
+
+ return expr;
+}
+
+ExprDef *
+ExprCreateInteger(int ival)
+{
+ ExprDef *expr = ExprCreate(EXPR_VALUE, EXPR_TYPE_INT);
+ if (!expr)
+ return NULL;
+
+ expr->value.ival = ival;
+
+ return expr;
+}
+
+ExprDef *
+ExprCreateKeyName(xkb_atom_t key_name)
+{
+ ExprDef *expr = ExprCreate(EXPR_VALUE, EXPR_TYPE_KEYNAME);
+ if (!expr)
+ return NULL;
+
+ expr->value.keyName = key_name;
+
+ return expr;
+}
+
+ExprDef *
+ExprCreateIdent(xkb_atom_t ident)
+{
+ ExprDef *expr = ExprCreate(EXPR_IDENT, EXPR_TYPE_UNKNOWN);
+ if (!expr)
+ return NULL;
+
+ expr->value.ident = ident;
+
+ return expr;
+}
+
ExprDef *
ExprCreateUnary(enum expr_op_type op, enum expr_value_type type,
ExprDef *child)
return expr;
}
+ExprDef *
+ExprCreateFieldRef(xkb_atom_t element, xkb_atom_t field)
+{
+ ExprDef *expr = ExprCreate(EXPR_FIELD_REF, EXPR_TYPE_UNKNOWN);
+ if (!expr)
+ return NULL;
+
+ expr->value.field.element = element;
+ expr->value.field.field = field;
+
+ return expr;
+}
+
+ExprDef *
+ExprCreateArrayRef(xkb_atom_t element, xkb_atom_t field, ExprDef *entry)
+{
+ ExprDef *expr = ExprCreate(EXPR_ARRAY_REF, EXPR_TYPE_UNKNOWN);
+ if (!expr)
+ return NULL;
+
+ expr->value.array.element = element;
+ expr->value.array.field = field;
+ expr->value.array.entry = entry;
+
+ return expr;
+}
+
KeycodeDef *
KeycodeCreate(xkb_atom_t name, int64_t value)
{
AppendStmt(ParseCommon *to, ParseCommon *append);
ExprDef *
-ExprCreate(enum expr_op_type op, enum expr_value_type type);
+ExprCreateString(xkb_atom_t str);
+
+ExprDef *
+ExprCreateInteger(int ival);
+
+ExprDef *
+ExprCreateKeyName(xkb_atom_t key_name);
+
+ExprDef *
+ExprCreateIdent(xkb_atom_t ident);
ExprDef *
ExprCreateUnary(enum expr_op_type op, enum expr_value_type type,
ExprDef *
ExprCreateBinary(enum expr_op_type op, ExprDef *left, ExprDef *right);
+ExprDef *
+ExprCreateFieldRef(xkb_atom_t element, xkb_atom_t field);
+
+ExprDef *
+ExprCreateArrayRef(xkb_atom_t element, xkb_atom_t field, ExprDef *entry);
+
KeycodeDef *
KeycodeCreate(xkb_atom_t name, int64_t value);
;
Lhs : FieldSpec
- {
- ExprDef *expr;
- expr = ExprCreate(EXPR_IDENT, EXPR_TYPE_UNKNOWN);
- expr->value.ident = $1;
- $$ = expr;
- }
+ { $$ = ExprCreateIdent($1); }
| FieldSpec DOT FieldSpec
- {
- ExprDef *expr;
- expr = ExprCreate(EXPR_FIELD_REF, EXPR_TYPE_UNKNOWN);
- expr->value.field.element = $1;
- expr->value.field.field = $3;
- $$ = expr;
- }
+ { $$ = ExprCreateFieldRef($1, $3); }
| FieldSpec OBRACKET Expr CBRACKET
- {
- ExprDef *expr;
- expr = ExprCreate(EXPR_ARRAY_REF, EXPR_TYPE_UNKNOWN);
- expr->value.array.element = XKB_ATOM_NONE;
- expr->value.array.field = $1;
- expr->value.array.entry = $3;
- $$ = expr;
- }
+ { $$ = ExprCreateArrayRef(XKB_ATOM_NONE, $1, $3); }
| FieldSpec DOT FieldSpec OBRACKET Expr CBRACKET
- {
- ExprDef *expr;
- expr = ExprCreate(EXPR_ARRAY_REF, EXPR_TYPE_UNKNOWN);
- expr->value.array.element = $1;
- expr->value.array.field = $3;
- expr->value.array.entry = $5;
- $$ = expr;
- }
+ { $$ = ExprCreateArrayRef($1, $3, $5); }
;
Terminal : String
- {
- ExprDef *expr;
- expr = ExprCreate(EXPR_VALUE, EXPR_TYPE_STRING);
- expr->value.str = $1;
- $$ = expr;
- }
+ { $$ = ExprCreateString($1); }
| Integer
- {
- ExprDef *expr;
- expr = ExprCreate(EXPR_VALUE, EXPR_TYPE_INT);
- expr->value.ival = $1;
- $$ = expr;
- }
+ { $$ = ExprCreateInteger($1); }
| Float
- {
- $$ = NULL;
- }
+ { $$ = NULL; }
| KEYNAME
- {
- ExprDef *expr;
- expr = ExprCreate(EXPR_VALUE, EXPR_TYPE_KEYNAME);
- expr->value.keyName = $1;
- $$ = expr;
- }
+ { $$ = ExprCreateKeyName($1); }
;
OptKeySymList : KeySymList { $$ = $1; }