+static struct expr *when_expr_dungeon;
+
+static void starve_when_decl TAC_ARGS((void));
+
+static void
+starve_when_decl()
+{
+ if (!WHEN_EXPR_ROOT_SANE()) {
+ report(LOG_WARNING, "INTERNAL: when_expr_root not sane during starve_when_decl!");
+ }
+ when_expr_root->next = when_expr_dungeon;
+ when_expr_dungeon = when_expr_root;
+ when_expr_root = NULL;
+ when_expr_root_init();
+}
+
+static int feed_when_decl TAC_ARGS((void));
+
+static int
+feed_when_decl()
+{
+ if (!when_expr_dungeon) {
+ report(LOG_ERR, "INTERNAL: No expr in dungeon and feed_when_decl() called");
+ return (1);
+ }
+ if (!WHEN_EXPR_ROOT_EMPTY()) {
+ report(LOG_WARNING, "INTERNAL: Some 'when' expression found still pushed in dungeon during feed_when_decl()!");
+ }
+ free_expr(when_expr_root);
+ when_expr_root = when_expr_dungeon;
+ when_expr_dungeon = when_expr_dungeon->next;
+ when_expr_root->next = NULL;
+ return (0);
+}
+