diff options
Diffstat (limited to 'src/evaluate.c')
-rw-r--r-- | src/evaluate.c | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/src/evaluate.c b/src/evaluate.c index d18b8f63..8b54dbc0 100644 --- a/src/evaluate.c +++ b/src/evaluate.c @@ -1885,6 +1885,19 @@ static int table_evaluate(struct eval_ctx *ctx, struct table *table) struct chain *chain; struct set *set; + if (table_lookup(&ctx->cmd->handle) == NULL) { + if (table == NULL) { + table = table_alloc(); + handle_merge(&table->handle, &ctx->cmd->handle); + table_add_hash(table); + } else { + table_add_hash(table_get(table)); + } + } + + if (ctx->cmd->table == NULL) + return 0; + ctx->table = table; list_for_each_entry(set, &table->sets, list) { handle_merge(&set->handle, &table->handle); @@ -1916,8 +1929,6 @@ static int cmd_evaluate_add(struct eval_ctx *ctx, struct cmd *cmd) return 0; return chain_evaluate(ctx, cmd->chain); case CMD_OBJ_TABLE: - if (cmd->data == NULL) - return 0; return table_evaluate(ctx, cmd->table); default: BUG("invalid command object type %u\n", cmd->obj); |