txlyre hai 1 semana
pai
achega
547a78e9e6
Modificáronse 4 ficheiros con 171 adicións e 134 borrados
  1. 21 1
      qirt.c
  2. 1 0
      qirt.h
  3. 147 133
      qistd.c
  4. 2 0
      std.qi

+ 21 - 1
qirt.c

@@ -101,7 +101,7 @@ qi_list_t *qi_list_push(qi_list_t *list, void *value) {
 }
 
 qi_bool qi_list_insert(qi_list_t *list, qi_ssize_t index, void *value) {
-  if (index == -1) {
+  if (index == -1 || index == (qi_ssize_t)qi_list_length(list)) {
     qi_list_push(list, value);
 
     return true;
@@ -127,6 +127,12 @@ qi_bool qi_list_delete(qi_list_t *list, qi_ssize_t index) {
   if (qi_list_empty(list))
     return false;
 
+  if (index == -1 || index == (qi_ssize_t)qi_list_length(list)) {
+    qi_list_pop(list);
+
+    return true;
+  }
+
   if (index < 0)
     index += (qi_ssize_t)qi_list_length(list);
 
@@ -1337,6 +1343,14 @@ void qi_fatal(qi_state_t *state, char *format, ...) {
 
   va_end(args);
 
+  if (qi_list_length(state->exceptions) > 1) {
+    for (qi_ssize_t i = (qi_ssize_t)qi_list_length(state->exceptions) - 2; i >= 0; i--) {
+      qi_value_t *value = qi_list_data(state->exceptions, i);
+
+      fprintf(stderr, "  While handling an exception: %s\n", qi_repr(state, value, false));
+    }
+  }
+
   if (__debug_enabled && !qi_list_empty(state->calltrace)) {
     fputs("Traceback (more recent call last):\n", stderr);
 
@@ -1402,6 +1416,8 @@ void qi_unset_trap(qi_state_t *state, qi_trap_t *trap) {
 }
 
 void qi_throw(qi_state_t *state, qi_value_t *value) {
+  qi_list_push(state->exceptions, value);
+
   if (qi_list_empty(state->traps)) {
     char *s = qi_repr(state, value, false);
 
@@ -1411,6 +1427,8 @@ void qi_throw(qi_state_t *state, qi_value_t *value) {
     qi_fatal(state, "uncaught exception: %s", s);
   }
 
+  qi_list_pop(state->exceptions);
+
   qi_trap_t *trap = qi_list_last(state->traps);
   trap->value = value;
 
@@ -3292,6 +3310,7 @@ static qi_state_t *qi_state_clone(qi_state_t *state) {
   memcpy(newstate, state, sizeof(qi_state_t));
 
   newstate->traps = qi_list_make();
+  newstate->exceptions = qi_list_make();
   newstate->scopes = qi_list_copy(state->scopes);
   qi_set_barrier(newstate);
 
@@ -4662,6 +4681,7 @@ static void qi_state_setup(qi_state_t *state) {
   state->_stdout->value.file.is_open = true;
 
   state->traps = qi_list_make();
+  state->exceptions = qi_list_make();
   state->scopes = qi_list_make();
   qi_new_sticky_scope(state);
 

+ 1 - 0
qirt.h

@@ -186,6 +186,7 @@ struct _qi_state_t {
   void *intern_strs_mutex;
 
   qi_list_t *traps;
+  qi_list_t *exceptions;
   qi_list_t *scopes;
   qi_list_t *calltrace;
 

+ 147 - 133
qistd.c

@@ -3469,456 +3469,468 @@ return list;
 }
 inline static qi_list_t *__qistd568(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(2);
+qi_list_data(list, 0) = qi_make_string(state, "list.insert");
+qi_list_data(list, 1) = qi_get(state, "list_insert");
+return list;
+}
+inline static qi_list_t *__qistd569(qi_state_t *state) {
+qi_list_t *list = qi_list_make_n(2);
+qi_list_data(list, 0) = qi_make_string(state, "list.delete");
+qi_list_data(list, 1) = qi_get(state, "list_delete");
+return list;
+}
+inline static qi_list_t *__qistd570(qi_state_t *state) {
+qi_list_t *list = qi_list_make_n(2);
 qi_list_data(list, 0) = qi_make_string(state, "list.slice");
 qi_list_data(list, 1) = qi_get(state, "slice");
 return list;
 }
-inline static qi_list_t *__qistd569(qi_state_t *state) {
+inline static qi_list_t *__qistd571(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(2);
 qi_list_data(list, 0) = qi_make_string(state, "string.slice");
 qi_list_data(list, 1) = qi_get(state, "slice");
 return list;
 }
-inline static qi_list_t *__qistd570(qi_state_t *state) {
+inline static qi_list_t *__qistd572(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(2);
 qi_list_data(list, 0) = qi_make_string(state, "bytes.slice");
 qi_list_data(list, 1) = qi_get(state, "slice");
 return list;
 }
-inline static qi_list_t *__qistd571(qi_state_t *state) {
+inline static qi_list_t *__qistd573(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(2);
 qi_list_data(list, 0) = qi_make_string(state, "string.startsWith");
 qi_list_data(list, 1) = qi_get(state, "str_startswith");
 return list;
 }
-inline static qi_list_t *__qistd572(qi_state_t *state) {
+inline static qi_list_t *__qistd574(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(2);
 qi_list_data(list, 0) = qi_make_string(state, "string.endsWith");
 qi_list_data(list, 1) = qi_get(state, "str_endswith");
 return list;
 }
-inline static qi_list_t *__qistd573(qi_state_t *state) {
+inline static qi_list_t *__qistd575(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(2);
 qi_list_data(list, 0) = qi_make_string(state, "string.split");
 qi_list_data(list, 1) = qi_get(state, "str_split");
 return list;
 }
-inline static qi_list_t *__qistd574(qi_state_t *state) {
+inline static qi_list_t *__qistd576(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(2);
 qi_list_data(list, 0) = qi_make_string(state, "string.replace");
 qi_list_data(list, 1) = qi_get(state, "str_replace");
 return list;
 }
-inline static qi_list_t *__qistd575(qi_state_t *state) {
+inline static qi_list_t *__qistd577(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(2);
 qi_list_data(list, 0) = qi_make_string(state, "table.keys");
 qi_list_data(list, 1) = qi_get(state, "table_keys");
 return list;
 }
-inline static qi_list_t *__qistd576(qi_state_t *state) {
+inline static qi_list_t *__qistd578(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(2);
 qi_list_data(list, 0) = qi_make_string(state, "table.values");
 qi_list_data(list, 1) = qi_get(state, "table_values");
 return list;
 }
-inline static qi_list_t *__qistd580(qi_state_t *state) {
+inline static qi_list_t *__qistd582(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(2);
 qi_list_data(list, 0) = qi_get(state, "f");
 qi_list_data(list, 1) = qi_get(state, "xs");
 return list;
 }
-qi_value_t *__qistd578(qi_state_t *state, qi_size_t pargc, qi_list_t *pargs) {
+qi_value_t *__qistd580(qi_state_t *state, qi_size_t pargc, qi_list_t *pargs) {
 qi_decl(state, "f", qi_list_index(pargs, 1));
 qi_decl(state, "xs", qi_list_index(pargs, 0));
-qi_value_t *__qistd579 = qi_call(state, qi_get(state, "reduce"), __qistd580(state));
-return __qistd579;return state->nil;
+qi_value_t *__qistd581 = qi_call(state, qi_get(state, "reduce"), __qistd582(state));
+return __qistd581;return state->nil;
 }
-inline static qi_list_t *__qistd577(qi_state_t *state) {
+inline static qi_list_t *__qistd579(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(2);
 qi_list_data(list, 0) = qi_make_string(state, "list.reduce");
-qi_list_data(list, 1) = qi_make_function(state, "<anon>", 2, __qistd578, NULL);
+qi_list_data(list, 1) = qi_make_function(state, "<anon>", 2, __qistd580, NULL);
 return list;
 }
-inline static qi_list_t *__qistd584(qi_state_t *state) {
+inline static qi_list_t *__qistd586(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(2);
 qi_list_data(list, 0) = qi_get(state, "f");
 qi_list_data(list, 1) = qi_get(state, "xs");
 return list;
 }
-qi_value_t *__qistd582(qi_state_t *state, qi_size_t pargc, qi_list_t *pargs) {
+qi_value_t *__qistd584(qi_state_t *state, qi_size_t pargc, qi_list_t *pargs) {
 qi_decl(state, "f", qi_list_index(pargs, 1));
 qi_decl(state, "xs", qi_list_index(pargs, 0));
-qi_value_t *__qistd583 = qi_call(state, qi_get(state, "reduce"), __qistd584(state));
-return __qistd583;return state->nil;
+qi_value_t *__qistd585 = qi_call(state, qi_get(state, "reduce"), __qistd586(state));
+return __qistd585;return state->nil;
 }
-inline static qi_list_t *__qistd581(qi_state_t *state) {
+inline static qi_list_t *__qistd583(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(2);
 qi_list_data(list, 0) = qi_make_string(state, "tuple.reduce");
-qi_list_data(list, 1) = qi_make_function(state, "<anon>", 2, __qistd582, NULL);
+qi_list_data(list, 1) = qi_make_function(state, "<anon>", 2, __qistd584, NULL);
 return list;
 }
-inline static qi_list_t *__qistd588(qi_state_t *state) {
+inline static qi_list_t *__qistd590(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(2);
 qi_list_data(list, 0) = qi_get(state, "f");
 qi_list_data(list, 1) = qi_get(state, "xs");
 return list;
 }
-qi_value_t *__qistd586(qi_state_t *state, qi_size_t pargc, qi_list_t *pargs) {
+qi_value_t *__qistd588(qi_state_t *state, qi_size_t pargc, qi_list_t *pargs) {
 qi_decl(state, "f", qi_list_index(pargs, 1));
 qi_decl(state, "xs", qi_list_index(pargs, 0));
-qi_value_t *__qistd587 = qi_call(state, qi_get(state, "reduce"), __qistd588(state));
-return __qistd587;return state->nil;
+qi_value_t *__qistd589 = qi_call(state, qi_get(state, "reduce"), __qistd590(state));
+return __qistd589;return state->nil;
 }
-inline static qi_list_t *__qistd585(qi_state_t *state) {
+inline static qi_list_t *__qistd587(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(2);
 qi_list_data(list, 0) = qi_make_string(state, "string.reduce");
-qi_list_data(list, 1) = qi_make_function(state, "<anon>", 2, __qistd586, NULL);
+qi_list_data(list, 1) = qi_make_function(state, "<anon>", 2, __qistd588, NULL);
 return list;
 }
-inline static qi_list_t *__qistd592(qi_state_t *state) {
+inline static qi_list_t *__qistd594(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(2);
 qi_list_data(list, 0) = qi_get(state, "f");
 qi_list_data(list, 1) = qi_get(state, "xs");
 return list;
 }
-qi_value_t *__qistd590(qi_state_t *state, qi_size_t pargc, qi_list_t *pargs) {
+qi_value_t *__qistd592(qi_state_t *state, qi_size_t pargc, qi_list_t *pargs) {
 qi_decl(state, "f", qi_list_index(pargs, 1));
 qi_decl(state, "xs", qi_list_index(pargs, 0));
-qi_value_t *__qistd591 = qi_call(state, qi_get(state, "reduce"), __qistd592(state));
-return __qistd591;return state->nil;
+qi_value_t *__qistd593 = qi_call(state, qi_get(state, "reduce"), __qistd594(state));
+return __qistd593;return state->nil;
 }
-inline static qi_list_t *__qistd589(qi_state_t *state) {
+inline static qi_list_t *__qistd591(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(2);
 qi_list_data(list, 0) = qi_make_string(state, "bytes.reduce");
-qi_list_data(list, 1) = qi_make_function(state, "<anon>", 2, __qistd590, NULL);
+qi_list_data(list, 1) = qi_make_function(state, "<anon>", 2, __qistd592, NULL);
 return list;
 }
-inline static qi_list_t *__qistd593(qi_state_t *state) {
+inline static qi_list_t *__qistd595(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(2);
 qi_list_data(list, 0) = qi_make_string(state, "list.sum");
 qi_list_data(list, 1) = qi_get(state, "sum");
 return list;
 }
-inline static qi_list_t *__qistd594(qi_state_t *state) {
+inline static qi_list_t *__qistd596(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(2);
 qi_list_data(list, 0) = qi_make_string(state, "tuple.sum");
 qi_list_data(list, 1) = qi_get(state, "sum");
 return list;
 }
-inline static qi_list_t *__qistd595(qi_state_t *state) {
+inline static qi_list_t *__qistd597(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(2);
 qi_list_data(list, 0) = qi_make_string(state, "list.product");
 qi_list_data(list, 1) = qi_get(state, "product");
 return list;
 }
-inline static qi_list_t *__qistd596(qi_state_t *state) {
+inline static qi_list_t *__qistd598(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(2);
 qi_list_data(list, 0) = qi_make_string(state, "tuple.product");
 qi_list_data(list, 1) = qi_get(state, "product");
 return list;
 }
-inline static qi_list_t *__qistd597(qi_state_t *state) {
+inline static qi_list_t *__qistd599(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(2);
 qi_list_data(list, 0) = qi_make_string(state, "list.all");
 qi_list_data(list, 1) = qi_get(state, "all");
 return list;
 }
-inline static qi_list_t *__qistd598(qi_state_t *state) {
+inline static qi_list_t *__qistd600(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(2);
 qi_list_data(list, 0) = qi_make_string(state, "tuple.all");
 qi_list_data(list, 1) = qi_get(state, "all");
 return list;
 }
-inline static qi_list_t *__qistd599(qi_state_t *state) {
+inline static qi_list_t *__qistd601(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(2);
 qi_list_data(list, 0) = qi_make_string(state, "list.any");
 qi_list_data(list, 1) = qi_get(state, "any");
 return list;
 }
-inline static qi_list_t *__qistd600(qi_state_t *state) {
+inline static qi_list_t *__qistd602(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(2);
 qi_list_data(list, 0) = qi_make_string(state, "tuple.any");
 qi_list_data(list, 1) = qi_get(state, "any");
 return list;
 }
-inline static qi_list_t *__qistd604(qi_state_t *state) {
+inline static qi_list_t *__qistd606(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(2);
 qi_list_data(list, 0) = qi_get(state, "f");
 qi_list_data(list, 1) = qi_get(state, "xs");
 return list;
 }
-qi_value_t *__qistd602(qi_state_t *state, qi_size_t pargc, qi_list_t *pargs) {
+qi_value_t *__qistd604(qi_state_t *state, qi_size_t pargc, qi_list_t *pargs) {
 qi_decl(state, "f", qi_list_index(pargs, 1));
 qi_decl(state, "xs", qi_list_index(pargs, 0));
-qi_value_t *__qistd603 = qi_call(state, qi_get(state, "map"), __qistd604(state));
-return __qistd603;return state->nil;
+qi_value_t *__qistd605 = qi_call(state, qi_get(state, "map"), __qistd606(state));
+return __qistd605;return state->nil;
 }
-inline static qi_list_t *__qistd601(qi_state_t *state) {
+inline static qi_list_t *__qistd603(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(2);
 qi_list_data(list, 0) = qi_make_string(state, "list.map");
-qi_list_data(list, 1) = qi_make_function(state, "<anon>", 2, __qistd602, NULL);
+qi_list_data(list, 1) = qi_make_function(state, "<anon>", 2, __qistd604, NULL);
 return list;
 }
-inline static qi_list_t *__qistd608(qi_state_t *state) {
+inline static qi_list_t *__qistd610(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(2);
 qi_list_data(list, 0) = qi_get(state, "f");
 qi_list_data(list, 1) = qi_get(state, "xs");
 return list;
 }
-qi_value_t *__qistd606(qi_state_t *state, qi_size_t pargc, qi_list_t *pargs) {
+qi_value_t *__qistd608(qi_state_t *state, qi_size_t pargc, qi_list_t *pargs) {
 qi_decl(state, "f", qi_list_index(pargs, 1));
 qi_decl(state, "xs", qi_list_index(pargs, 0));
-qi_value_t *__qistd607 = qi_call(state, qi_get(state, "map"), __qistd608(state));
-return __qistd607;return state->nil;
+qi_value_t *__qistd609 = qi_call(state, qi_get(state, "map"), __qistd610(state));
+return __qistd609;return state->nil;
 }
-inline static qi_list_t *__qistd605(qi_state_t *state) {
+inline static qi_list_t *__qistd607(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(2);
 qi_list_data(list, 0) = qi_make_string(state, "tuple.map");
-qi_list_data(list, 1) = qi_make_function(state, "<anon>", 2, __qistd606, NULL);
+qi_list_data(list, 1) = qi_make_function(state, "<anon>", 2, __qistd608, NULL);
 return list;
 }
-inline static qi_list_t *__qistd612(qi_state_t *state) {
+inline static qi_list_t *__qistd614(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(2);
 qi_list_data(list, 0) = qi_get(state, "f");
 qi_list_data(list, 1) = qi_get(state, "xs");
 return list;
 }
-qi_value_t *__qistd610(qi_state_t *state, qi_size_t pargc, qi_list_t *pargs) {
+qi_value_t *__qistd612(qi_state_t *state, qi_size_t pargc, qi_list_t *pargs) {
 qi_decl(state, "f", qi_list_index(pargs, 1));
 qi_decl(state, "xs", qi_list_index(pargs, 0));
-qi_value_t *__qistd611 = qi_call(state, qi_get(state, "map"), __qistd612(state));
-return __qistd611;return state->nil;
+qi_value_t *__qistd613 = qi_call(state, qi_get(state, "map"), __qistd614(state));
+return __qistd613;return state->nil;
 }
-inline static qi_list_t *__qistd609(qi_state_t *state) {
+inline static qi_list_t *__qistd611(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(2);
 qi_list_data(list, 0) = qi_make_string(state, "string.map");
-qi_list_data(list, 1) = qi_make_function(state, "<anon>", 2, __qistd610, NULL);
+qi_list_data(list, 1) = qi_make_function(state, "<anon>", 2, __qistd612, NULL);
 return list;
 }
-inline static qi_list_t *__qistd616(qi_state_t *state) {
+inline static qi_list_t *__qistd618(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(2);
 qi_list_data(list, 0) = qi_get(state, "f");
 qi_list_data(list, 1) = qi_get(state, "xs");
 return list;
 }
-qi_value_t *__qistd614(qi_state_t *state, qi_size_t pargc, qi_list_t *pargs) {
+qi_value_t *__qistd616(qi_state_t *state, qi_size_t pargc, qi_list_t *pargs) {
 qi_decl(state, "f", qi_list_index(pargs, 1));
 qi_decl(state, "xs", qi_list_index(pargs, 0));
-qi_value_t *__qistd615 = qi_call(state, qi_get(state, "map"), __qistd616(state));
-return __qistd615;return state->nil;
+qi_value_t *__qistd617 = qi_call(state, qi_get(state, "map"), __qistd618(state));
+return __qistd617;return state->nil;
 }
-inline static qi_list_t *__qistd613(qi_state_t *state) {
+inline static qi_list_t *__qistd615(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(2);
 qi_list_data(list, 0) = qi_make_string(state, "bytes.map");
-qi_list_data(list, 1) = qi_make_function(state, "<anon>", 2, __qistd614, NULL);
+qi_list_data(list, 1) = qi_make_function(state, "<anon>", 2, __qistd616, NULL);
 return list;
 }
-inline static qi_list_t *__qistd620(qi_state_t *state) {
+inline static qi_list_t *__qistd622(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(2);
 qi_list_data(list, 0) = qi_get(state, "f");
 qi_list_data(list, 1) = qi_get(state, "xs");
 return list;
 }
-qi_value_t *__qistd618(qi_state_t *state, qi_size_t pargc, qi_list_t *pargs) {
+qi_value_t *__qistd620(qi_state_t *state, qi_size_t pargc, qi_list_t *pargs) {
 qi_decl(state, "f", qi_list_index(pargs, 1));
 qi_decl(state, "xs", qi_list_index(pargs, 0));
-qi_value_t *__qistd619 = qi_call(state, qi_get(state, "filter"), __qistd620(state));
-return __qistd619;return state->nil;
+qi_value_t *__qistd621 = qi_call(state, qi_get(state, "filter"), __qistd622(state));
+return __qistd621;return state->nil;
 }
-inline static qi_list_t *__qistd617(qi_state_t *state) {
+inline static qi_list_t *__qistd619(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(2);
 qi_list_data(list, 0) = qi_make_string(state, "list.filter");
-qi_list_data(list, 1) = qi_make_function(state, "<anon>", 2, __qistd618, NULL);
+qi_list_data(list, 1) = qi_make_function(state, "<anon>", 2, __qistd620, NULL);
 return list;
 }
-inline static qi_list_t *__qistd624(qi_state_t *state) {
+inline static qi_list_t *__qistd626(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(2);
 qi_list_data(list, 0) = qi_get(state, "f");
 qi_list_data(list, 1) = qi_get(state, "xs");
 return list;
 }
-qi_value_t *__qistd622(qi_state_t *state, qi_size_t pargc, qi_list_t *pargs) {
+qi_value_t *__qistd624(qi_state_t *state, qi_size_t pargc, qi_list_t *pargs) {
 qi_decl(state, "f", qi_list_index(pargs, 1));
 qi_decl(state, "xs", qi_list_index(pargs, 0));
-qi_value_t *__qistd623 = qi_call(state, qi_get(state, "filter"), __qistd624(state));
-return __qistd623;return state->nil;
+qi_value_t *__qistd625 = qi_call(state, qi_get(state, "filter"), __qistd626(state));
+return __qistd625;return state->nil;
 }
-inline static qi_list_t *__qistd621(qi_state_t *state) {
+inline static qi_list_t *__qistd623(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(2);
 qi_list_data(list, 0) = qi_make_string(state, "tuple.filter");
-qi_list_data(list, 1) = qi_make_function(state, "<anon>", 2, __qistd622, NULL);
+qi_list_data(list, 1) = qi_make_function(state, "<anon>", 2, __qistd624, NULL);
 return list;
 }
-inline static qi_list_t *__qistd628(qi_state_t *state) {
+inline static qi_list_t *__qistd630(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(2);
 qi_list_data(list, 0) = qi_get(state, "f");
 qi_list_data(list, 1) = qi_get(state, "xs");
 return list;
 }
-qi_value_t *__qistd626(qi_state_t *state, qi_size_t pargc, qi_list_t *pargs) {
+qi_value_t *__qistd628(qi_state_t *state, qi_size_t pargc, qi_list_t *pargs) {
 qi_decl(state, "f", qi_list_index(pargs, 1));
 qi_decl(state, "xs", qi_list_index(pargs, 0));
-qi_value_t *__qistd627 = qi_call(state, qi_get(state, "filter"), __qistd628(state));
-return __qistd627;return state->nil;
+qi_value_t *__qistd629 = qi_call(state, qi_get(state, "filter"), __qistd630(state));
+return __qistd629;return state->nil;
 }
-inline static qi_list_t *__qistd625(qi_state_t *state) {
+inline static qi_list_t *__qistd627(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(2);
 qi_list_data(list, 0) = qi_make_string(state, "string.filter");
-qi_list_data(list, 1) = qi_make_function(state, "<anon>", 2, __qistd626, NULL);
+qi_list_data(list, 1) = qi_make_function(state, "<anon>", 2, __qistd628, NULL);
 return list;
 }
-inline static qi_list_t *__qistd632(qi_state_t *state) {
+inline static qi_list_t *__qistd634(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(2);
 qi_list_data(list, 0) = qi_get(state, "f");
 qi_list_data(list, 1) = qi_get(state, "xs");
 return list;
 }
-qi_value_t *__qistd630(qi_state_t *state, qi_size_t pargc, qi_list_t *pargs) {
+qi_value_t *__qistd632(qi_state_t *state, qi_size_t pargc, qi_list_t *pargs) {
 qi_decl(state, "f", qi_list_index(pargs, 1));
 qi_decl(state, "xs", qi_list_index(pargs, 0));
-qi_value_t *__qistd631 = qi_call(state, qi_get(state, "filter"), __qistd632(state));
-return __qistd631;return state->nil;
+qi_value_t *__qistd633 = qi_call(state, qi_get(state, "filter"), __qistd634(state));
+return __qistd633;return state->nil;
 }
-inline static qi_list_t *__qistd629(qi_state_t *state) {
+inline static qi_list_t *__qistd631(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(2);
 qi_list_data(list, 0) = qi_make_string(state, "bytes.filter");
-qi_list_data(list, 1) = qi_make_function(state, "<anon>", 2, __qistd630, NULL);
+qi_list_data(list, 1) = qi_make_function(state, "<anon>", 2, __qistd632, NULL);
 return list;
 }
-inline static qi_list_t *__qistd633(qi_state_t *state) {
+inline static qi_list_t *__qistd635(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(2);
 qi_list_data(list, 0) = qi_make_string(state, "string.index");
 qi_list_data(list, 1) = qi_get(state, "str_index");
 return list;
 }
-inline static qi_list_t *__qistd634(qi_state_t *state) {
+inline static qi_list_t *__qistd636(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(2);
 qi_list_data(list, 0) = qi_make_string(state, "string.lstrip");
 qi_list_data(list, 1) = qi_get(state, "str_lstrip");
 return list;
 }
-inline static qi_list_t *__qistd635(qi_state_t *state) {
+inline static qi_list_t *__qistd637(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(2);
 qi_list_data(list, 0) = qi_make_string(state, "string.rstrip");
 qi_list_data(list, 1) = qi_get(state, "str_rstrip");
 return list;
 }
-inline static qi_list_t *__qistd636(qi_state_t *state) {
+inline static qi_list_t *__qistd638(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(2);
 qi_list_data(list, 0) = qi_make_string(state, "string.strip");
 qi_list_data(list, 1) = qi_get(state, "str_strip");
 return list;
 }
-inline static qi_list_t *__qistd637(qi_state_t *state) {
+inline static qi_list_t *__qistd639(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(2);
 qi_list_data(list, 0) = qi_make_string(state, "string.toupper");
 qi_list_data(list, 1) = qi_get(state, "str_toupper");
 return list;
 }
-inline static qi_list_t *__qistd638(qi_state_t *state) {
+inline static qi_list_t *__qistd640(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(2);
 qi_list_data(list, 0) = qi_make_string(state, "string.tolower");
 qi_list_data(list, 1) = qi_get(state, "str_tolower");
 return list;
 }
-inline static qi_list_t *__qistd639(qi_state_t *state) {
+inline static qi_list_t *__qistd641(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(2);
 qi_list_data(list, 0) = qi_make_string(state, "string.format");
 qi_list_data(list, 1) = qi_get(state, "format");
 return list;
 }
-inline static qi_list_t *__qistd640(qi_state_t *state) {
+inline static qi_list_t *__qistd642(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(2);
 qi_list_data(list, 0) = qi_make_string(state, "string.formatl");
 qi_list_data(list, 1) = qi_get(state, "formatl");
 return list;
 }
-inline static qi_list_t *__qistd641(qi_state_t *state) {
+inline static qi_list_t *__qistd643(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(2);
 qi_list_data(list, 0) = qi_make_string(state, "string.formatd");
 qi_list_data(list, 1) = qi_get(state, "formatd");
 return list;
 }
-qi_value_t *__qistd643(qi_state_t *state, qi_size_t pargc, qi_list_t *pargs) {
+qi_value_t *__qistd645(qi_state_t *state, qi_size_t pargc, qi_list_t *pargs) {
 return state->nil;
 }
-inline static qi_list_t *__qistd642(qi_state_t *state) {
+inline static qi_list_t *__qistd644(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(2);
 qi_list_data(list, 0) = qi_make_string(state, "file.__enter");
-qi_list_data(list, 1) = qi_make_function(state, "<anon>", 0, __qistd643, NULL);
+qi_list_data(list, 1) = qi_make_function(state, "<anon>", 0, __qistd645, NULL);
 return list;
 }
-inline static qi_list_t *__qistd647(qi_state_t *state) {
+inline static qi_list_t *__qistd649(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(1);
 qi_list_data(list, 0) = qi_get(state, "f");
 return list;
 }
-qi_value_t *__qistd645(qi_state_t *state, qi_size_t pargc, qi_list_t *pargs) {
+qi_value_t *__qistd647(qi_state_t *state, qi_size_t pargc, qi_list_t *pargs) {
 qi_decl(state, "f", qi_list_index(pargs, 0));
-qi_value_t *__qistd646 = qi_call(state, qi_get(state, "fclose"), __qistd647(state));
-return __qistd646;return state->nil;
+qi_value_t *__qistd648 = qi_call(state, qi_get(state, "fclose"), __qistd649(state));
+return __qistd648;return state->nil;
 }
-inline static qi_list_t *__qistd644(qi_state_t *state) {
+inline static qi_list_t *__qistd646(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(2);
 qi_list_data(list, 0) = qi_make_string(state, "file.__leave");
-qi_list_data(list, 1) = qi_make_function(state, "<anon>", 1, __qistd645, NULL);
+qi_list_data(list, 1) = qi_make_function(state, "<anon>", 1, __qistd647, NULL);
 return list;
 }
-inline static qi_list_t *__qistd648(qi_state_t *state) {
+inline static qi_list_t *__qistd650(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(2);
 qi_list_data(list, 0) = qi_make_string(state, "file.close");
 qi_list_data(list, 1) = qi_get(state, "fclose");
 return list;
 }
-inline static qi_list_t *__qistd649(qi_state_t *state) {
+inline static qi_list_t *__qistd651(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(2);
 qi_list_data(list, 0) = qi_make_string(state, "file.flush");
 qi_list_data(list, 1) = qi_get(state, "fflush");
 return list;
 }
-inline static qi_list_t *__qistd650(qi_state_t *state) {
+inline static qi_list_t *__qistd652(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(2);
 qi_list_data(list, 0) = qi_make_string(state, "file.seek");
 qi_list_data(list, 1) = qi_get(state, "fseek");
 return list;
 }
-inline static qi_list_t *__qistd651(qi_state_t *state) {
+inline static qi_list_t *__qistd653(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(2);
 qi_list_data(list, 0) = qi_make_string(state, "file.getc");
 qi_list_data(list, 1) = qi_get(state, "fgetc");
 return list;
 }
-inline static qi_list_t *__qistd652(qi_state_t *state) {
+inline static qi_list_t *__qistd654(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(2);
 qi_list_data(list, 0) = qi_make_string(state, "file.putc");
 qi_list_data(list, 1) = qi_get(state, "fputc");
 return list;
 }
-inline static qi_list_t *__qistd653(qi_state_t *state) {
+inline static qi_list_t *__qistd655(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(2);
 qi_list_data(list, 0) = qi_make_string(state, "file.gets");
 qi_list_data(list, 1) = qi_get(state, "fgets");
 return list;
 }
-inline static qi_list_t *__qistd654(qi_state_t *state) {
+inline static qi_list_t *__qistd656(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(2);
 qi_list_data(list, 0) = qi_make_string(state, "file.puts");
 qi_list_data(list, 1) = qi_get(state, "fputs");
 return list;
 }
-inline static qi_list_t *__qistd655(qi_state_t *state) {
+inline static qi_list_t *__qistd657(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(2);
 qi_list_data(list, 0) = qi_make_string(state, "file.tell");
 qi_list_data(list, 1) = qi_get(state, "ftell");
 return list;
 }
-inline static qi_list_t *__qistd656(qi_state_t *state) {
+inline static qi_list_t *__qistd658(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(2);
 qi_list_data(list, 0) = qi_make_string(state, "reference.deref");
 qi_list_data(list, 1) = qi_get(state, "deref");
 return list;
 }
-inline static qi_list_t *__qistd657(qi_state_t *state) {
+inline static qi_list_t *__qistd659(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(2);
 qi_list_data(list, 0) = qi_make_string(state, "reference.set");
 qi_list_data(list, 1) = qi_get(state, "ref_set");
@@ -3997,19 +4009,19 @@ qi_decl_const(state, "SEEK_SET", qi_make_number(state, 0));
 (void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd568(state)));
 (void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd569(state)));
 (void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd570(state)));
-qi_decl_const(state, "__slice", qi_get(state, "slice"));
 (void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd571(state)));
 (void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd572(state)));
+qi_decl_const(state, "__slice", qi_get(state, "slice"));
 (void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd573(state)));
 (void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd574(state)));
 (void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd575(state)));
 (void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd576(state)));
 (void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd577(state)));
-(void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd581(state)));
-(void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd585(state)));
-(void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd589(state)));
-(void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd593(state)));
-(void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd594(state)));
+(void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd578(state)));
+(void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd579(state)));
+(void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd583(state)));
+(void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd587(state)));
+(void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd591(state)));
 (void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd595(state)));
 (void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd596(state)));
 (void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd597(state)));
@@ -4017,15 +4029,15 @@ qi_decl_const(state, "__slice", qi_get(state, "slice"));
 (void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd599(state)));
 (void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd600(state)));
 (void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd601(state)));
-(void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd605(state)));
-(void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd609(state)));
-(void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd613(state)));
-(void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd617(state)));
-(void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd621(state)));
-(void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd625(state)));
-(void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd629(state)));
-(void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd633(state)));
-(void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd634(state)));
+(void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd602(state)));
+(void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd603(state)));
+(void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd607(state)));
+(void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd611(state)));
+(void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd615(state)));
+(void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd619(state)));
+(void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd623(state)));
+(void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd627(state)));
+(void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd631(state)));
 (void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd635(state)));
 (void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd636(state)));
 (void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd637(state)));
@@ -4034,9 +4046,9 @@ qi_decl_const(state, "__slice", qi_get(state, "slice"));
 (void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd640(state)));
 (void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd641(state)));
 (void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd642(state)));
+(void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd643(state)));
 (void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd644(state)));
-(void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd648(state)));
-(void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd649(state)));
+(void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd646(state)));
 (void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd650(state)));
 (void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd651(state)));
 (void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd652(state)));
@@ -4045,4 +4057,6 @@ qi_decl_const(state, "__slice", qi_get(state, "slice"));
 (void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd655(state)));
 (void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd656(state)));
 (void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd657(state)));
+(void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd658(state)));
+(void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd659(state)));
 }

+ 2 - 0
std.qi

@@ -152,6 +152,8 @@ func list_unshift(l, x) {
 }
 set_pseudomethod("list.shift", list_shift)
 set_pseudomethod("list.unshift", list_unshift)
+set_pseudomethod("list.insert", list_insert)
+set_pseudomethod("list.delete", list_delete)
 func slice(l) {
   if type(l) !in ("list", "string", "bytes", "ustr")
     throw "expected first argument to be: list, string, bytes or ustr, but got: " + type(l)