Currently it's under UnaryExpr, which just doesn't make sense.
Signed-off-by: Ran Benita <ran@unusedvar.com>
}
ExprDef *
+ExprCreateActionList(ExprDef *actions)
+{
+ ExprDef *expr = ExprCreate(EXPR_ACTION_LIST, EXPR_TYPE_ACTIONS, sizeof(ExprActionList));
+ if (!expr)
+ return NULL;
+ expr->actions.actions = actions;
+ return expr;
+}
+
+ExprDef *
ExprCreateKeysymList(xkb_keysym_t sym)
{
ExprDef *expr = ExprCreate(EXPR_KEYSYM_LIST, EXPR_TYPE_SYMBOLS, sizeof(ExprKeysymList));
return;
switch (expr->expr.op) {
- case EXPR_ACTION_LIST:
case EXPR_NEGATE:
case EXPR_UNARY_PLUS:
case EXPR_NOT:
FreeStmt((ParseCommon *) expr->action.args);
break;
+ case EXPR_ACTION_LIST:
+ FreeStmt((ParseCommon *) expr->actions.actions);
+ break;
+
case EXPR_ARRAY_REF:
FreeStmt((ParseCommon *) expr->array_ref.entry);
break;
[EXPR_TYPE_FLOAT] = "float",
[EXPR_TYPE_STRING] = "string",
[EXPR_TYPE_ACTION] = "action",
+ [EXPR_TYPE_ACTIONS] = "actions",
[EXPR_TYPE_KEYNAME] = "keyname",
[EXPR_TYPE_SYMBOLS] = "symbols",
};
ExprCreateAction(xkb_atom_t name, ExprDef *args);
ExprDef *
+ExprCreateActionList(ExprDef *actions);
+
+ExprDef *
ExprCreateMultiKeysymList(ExprDef *list);
ExprDef *
EXPR_TYPE_FLOAT,
EXPR_TYPE_STRING,
EXPR_TYPE_ACTION,
+ EXPR_TYPE_ACTIONS,
EXPR_TYPE_KEYNAME,
EXPR_TYPE_SYMBOLS,
typedef struct {
ExprCommon expr;
+ ExprDef *actions;
+} ExprActionList;
+
+typedef struct {
+ ExprCommon expr;
darray(xkb_keysym_t) syms;
darray(unsigned int) symsMapIndex;
darray(unsigned int) symsNumEntries;
ExprFieldRef field_ref;
ExprArrayRef array_ref;
ExprAction action;
+ ExprActionList actions;
ExprKeysymList keysym_list;
};
ArrayInit : OBRACKET OptKeySymList CBRACKET
{ $$ = $2; }
| OBRACKET ActionList CBRACKET
- { $$ = ExprCreateUnary(EXPR_ACTION_LIST, EXPR_TYPE_ACTION, $2); }
+ { $$ = ExprCreateActionList($2); }
;
GroupCompatDecl : GROUP Integer EQUALS Expr SEMI
}
nActs = 0;
- for (act = value->unary.child; act; act = (ExprDef *) act->common.next)
+ for (act = value->actions.actions; act; act = (ExprDef *) act->common.next)
nActs++;
if (darray_size(groupi->levels) < nActs)
groupi->defined |= GROUP_FIELD_ACTS;
- act = value->unary.child;
+ act = value->actions.actions;
for (unsigned i = 0; i < nActs; i++) {
union xkb_action *toAct = &darray_item(groupi->levels, i).action;