txlyre 1 dag sedan
förälder
incheckning
e366449846
1 ändrade filer med 7 tillägg och 10 borttagningar
  1. 7 10
      qirt.c

+ 7 - 10
qirt.c

@@ -610,14 +610,14 @@ static void qi_scope_run_defers(qi_state_t *state, qi_scope_t *scope) {
   }  
 }
 
-bool qi_old_scope(qi_state_t *state) {
+static bool _qi_old_scope(qi_state_t *state, bool ignore_barriers) {
   qi_scope_t *scope;
 
   if (qi_list_empty(state->scopes))
     return false;
 
   scope = qi_list_last(state->scopes);
-  if (scope->is_barrier)
+  if (!ignore_barriers && scope->is_barrier)
     return false;
 
   qi_scope_run_defers(state, scope);
@@ -627,6 +627,10 @@ bool qi_old_scope(qi_state_t *state) {
   return true;
 }
 
+bool qi_old_scope(qi_state_t *state) {
+  return _qi_old_scope(state, false);
+}
+
 qi_value_t *qi_call_meta(qi_state_t *state, bool *fail_flag, qi_value_t *value,
                          char *name, qi_size_t count, ...);
 
@@ -2868,14 +2872,7 @@ static qi_state_t *qi_state_clone(qi_state_t *state) {
 }
 
 void qi_exit(qi_state_t *state, int code) {
-  qi_ssize_t scopes_count = qi_list_length(state->scopes);
-
-  if (scopes_count > 1)
-    for (qi_ssize_t i = scopes_count - 1; i >= 0; i--) {
-      qi_scope_t *scope = qi_list_index(state->scopes, i);
-
-      qi_scope_run_defers(state, scope);
-    }
+  while (_qi_old_scope(state, true)) ;
 
   qi_finalize();