txlyre 1 day ago
parent
commit
2d47b3463a
3 changed files with 322 additions and 176 deletions
  1. 85 15
      qirt.c
  2. 224 156
      qistd.c
  3. 13 5
      std.qi

+ 85 - 15
qirt.c

@@ -1667,9 +1667,13 @@ qi_bool _qi_truthy(qi_state_t *state, qi_value_t *value) {
 
 
   case QI_TABLE: {
   case QI_TABLE: {
     qi_bool res = false;
     qi_bool res = false;
-    LOCKED(value, { res = qi_has_metatable(value) && qi_table_length(qi_get_metatable(value)) != 0; });
+    LOCKED(value, {
+      res = qi_has_metatable(value) &&
+            qi_table_length(qi_get_metatable(value)) != 0;
+    });
 
 
-    if (res) return true;
+    if (res)
+      return true;
   }
   }
   case QI_STRING:
   case QI_STRING:
   case QI_BYTES:
   case QI_BYTES:
@@ -1726,7 +1730,8 @@ qi_value_t *qi_cast(qi_state_t *state, qi_type_t type, qi_value_t *value) {
     if (value->type == QI_BYTES) {
     if (value->type == QI_BYTES) {
       qi_buffer_t *buffer = qi_buffer_make();
       qi_buffer_t *buffer = qi_buffer_make();
 
 
-      for (qi_size_t i = 0; i < value->value.bytes->size && value->value.bytes->data[i]; i++)
+      for (qi_size_t i = 0;
+           i < value->value.bytes->size && value->value.bytes->data[i]; i++)
         qi_buffer_append(buffer, value->value.bytes->data[i]);
         qi_buffer_append(buffer, value->value.bytes->data[i]);
 
 
       return qi_make_string(state, qi_buffer_read(buffer));
       return qi_make_string(state, qi_buffer_read(buffer));
@@ -2108,7 +2113,10 @@ qi_value_t *qi_index_set(qi_state_t *state, qi_bool is_pf, qi_value_t *value,
   if (value->type == QI_TABLE && index->type == QI_STRING) {
   if (value->type == QI_TABLE && index->type == QI_STRING) {
     qi_bool has_mt = false;
     qi_bool has_mt = false;
 
 
-    LOCKED(value, { has_mt = qi_has_metatable(value) && qi_table_has(qi_get_metatable(value), index->value.string); });
+    LOCKED(value, {
+      has_mt = qi_has_metatable(value) &&
+               qi_table_has(qi_get_metatable(value), index->value.string);
+    });
 
 
     if (has_mt) {
     if (has_mt) {
       qi_value_t *old;
       qi_value_t *old;
@@ -2124,8 +2132,8 @@ qi_value_t *qi_index_set(qi_state_t *state, qi_bool is_pf, qi_value_t *value,
     }
     }
   }
   }
 
 
-  if ((meta = qi_call_meta(state, &fail, value, "__index_set", 3, value,
-                                  index, newvalue)))
+  if ((meta = qi_call_meta(state, &fail, value, "__index_set", 3, value, index,
+                           newvalue)))
     return meta;
     return meta;
 
 
   if (fail)
   if (fail)
@@ -2245,7 +2253,9 @@ qi_value_t *qi_call_debug(qi_state_t *state, qi_value_t *value,
   return _qi_call(state, value, pargs, debug_data);
   return _qi_call(state, value, pargs, debug_data);
 }
 }
 
 
-static qi_bool _qi_guarded_equals(qi_state_t *state, qi_size_t depth, qi_list_t *tempstack, qi_value_t *a, qi_value_t *b) {
+static qi_bool _qi_guarded_equals(qi_state_t *state, qi_size_t depth,
+                                  qi_list_t *tempstack, qi_value_t *a,
+                                  qi_value_t *b) {
   qi_value_t *meta;
   qi_value_t *meta;
   if ((meta = qi_call_meta(state, NULL, a, "__equals", 2, a, b))) {
   if ((meta = qi_call_meta(state, NULL, a, "__equals", 2, a, b))) {
     if (meta->type != QI_BOOLEAN)
     if (meta->type != QI_BOOLEAN)
@@ -2262,7 +2272,8 @@ static qi_bool _qi_guarded_equals(qi_state_t *state, qi_size_t depth, qi_list_t
   }
   }
 
 
   if (depth >= state->rlimit)
   if (depth >= state->rlimit)
-    qi_throw_format(state, "recursion depth exceeded while comparing nested values");
+    qi_throw_format(state,
+                    "recursion depth exceeded while comparing nested values");
 
 
   if (a == b)
   if (a == b)
     return true;
     return true;
@@ -2321,7 +2332,8 @@ static qi_bool _qi_guarded_equals(qi_state_t *state, qi_size_t depth, qi_list_t
     }
     }
 
 
     for (qi_size_t i = 0; i < qi_list_length(a->value.list); i++)
     for (qi_size_t i = 0; i < qi_list_length(a->value.list); i++)
-      if (!_qi_guarded_equals(state, depth+1, tempstack, qi_list_index(a->value.list, i),
+      if (!_qi_guarded_equals(state, depth + 1, tempstack,
+                              qi_list_index(a->value.list, i),
                               qi_list_index(b->value.list, i))) {
                               qi_list_index(b->value.list, i))) {
         qi_mutex_unlock(a->mutex);
         qi_mutex_unlock(a->mutex);
         qi_mutex_unlock(b->mutex);
         qi_mutex_unlock(b->mutex);
@@ -2342,7 +2354,8 @@ static qi_bool _qi_guarded_equals(qi_state_t *state, qi_size_t depth, qi_list_t
       return false;
       return false;
 
 
     for (qi_size_t i = 0; i < qi_list_length(a->value.list); i++)
     for (qi_size_t i = 0; i < qi_list_length(a->value.list); i++)
-      if (!_qi_guarded_equals(state, depth+1, tempstack, qi_list_index(a->value.list, i),
+      if (!_qi_guarded_equals(state, depth + 1, tempstack,
+                              qi_list_index(a->value.list, i),
                               qi_list_index(b->value.list, i)))
                               qi_list_index(b->value.list, i)))
         return false;
         return false;
 
 
@@ -2383,7 +2396,7 @@ static qi_bool _qi_guarded_equals(qi_state_t *state, qi_size_t depth, qi_list_t
         return false;
         return false;
       }
       }
 
 
-      if (!_qi_guarded_equals(state, depth+1, tempstack, a_value, b_value)) {
+      if (!_qi_guarded_equals(state, depth + 1, tempstack, a_value, b_value)) {
         qi_mutex_unlock(a->mutex);
         qi_mutex_unlock(a->mutex);
         qi_mutex_unlock(b->mutex);
         qi_mutex_unlock(b->mutex);
 
 
@@ -2516,7 +2529,8 @@ qi_value_t *qi_add(qi_state_t *state, qi_value_t *a, qi_value_t *b) {
     strcat(string, b->value.string);
     strcat(string, b->value.string);
 
 
     return qi_make_string(state, string);
     return qi_make_string(state, string);
-  } else if (a->type == QI_STRING && b->type == QI_NUMBER && *a->value.string && !a->value.string[1]) {
+  } else if (a->type == QI_STRING && b->type == QI_NUMBER && *a->value.string &&
+             !a->value.string[1]) {
     char buf[2];
     char buf[2];
     buf[0] = *a->value.string + b->value.number;
     buf[0] = *a->value.string + b->value.number;
     buf[1] = 0;
     buf[1] = 0;
@@ -2614,7 +2628,8 @@ qi_value_t *qi_sub(qi_state_t *state, qi_value_t *a, qi_value_t *b) {
   if (fail)
   if (fail)
     goto leave;
     goto leave;
 
 
-  if (a->type == QI_STRING && b->type == QI_NUMBER && *a->value.string && !a->value.string[1]) {
+  if (a->type == QI_STRING && b->type == QI_NUMBER && *a->value.string &&
+      !a->value.string[1]) {
     char buf[2];
     char buf[2];
     buf[0] = *a->value.string - b->value.number;
     buf[0] = *a->value.string - b->value.number;
     buf[1] = 0;
     buf[1] = 0;
@@ -3386,6 +3401,61 @@ qi_value_t *qi_builtin_set_global(qi_state_t *state, qi_size_t pargc,
   return b;
   return b;
 }
 }
 
 
+qi_value_t *qi_builtin_unset_global(qi_state_t *state, qi_size_t pargc,
+                                    qi_list_t *pargs) {
+  qi_value_t *a = qi_list_data(pargs, 0);
+  qi_value_t *b = qi_list_data(pargs, 1);
+  if (!b)
+    b = state->zero;
+  else if (b->type != QI_NUMBER)
+    qi_throw_format(state,
+                    "expected second argument to be: number, but got: %s",
+                    _qi_type(state, b));
+
+  if (a->type != QI_STRING)
+    qi_throw_format(state, "expected first argument to be: string, but got: %s",
+                    _qi_type(state, a));
+
+  char *name = a->value.string;
+
+  qi_symbol_t *symbol;
+
+  qi_size_t offset = (qi_size_t)(b->value.number);
+  qi_scope_t *scope;
+
+  if (offset > 0) {
+    scope = qi_list_index(state->scopes, -((qi_ssize_t)offset));
+
+    if (!scope)
+      qi_throw_format(state, "illegal scope index: %s",
+                      qi_repr(state, b, true));
+  } else
+    scope = qi_list_first(state->scopes);
+
+  qi_mutex_lock(scope->mutex);
+
+  symbol = qi_table_get(scope->scope, name);
+  if (symbol) {
+    if (symbol->is_constant) {
+      qi_mutex_unlock(scope->mutex);
+
+      qi_throw_format(state, "cannot unset constant symbol: '%s'", name);
+    }
+
+    qi_value_t *ret = symbol->value;
+
+    qi_table_delete(scope->scope, name);
+
+    qi_mutex_unlock(scope->mutex);
+
+    return ret;
+  }
+
+  qi_mutex_unlock(scope->mutex);
+
+  return state->nil;
+}
+
 qi_value_t *qi_builtin_get_global(qi_state_t *state, qi_size_t pargc,
 qi_value_t *qi_builtin_get_global(qi_state_t *state, qi_size_t pargc,
                                   qi_list_t *pargs) {
                                   qi_list_t *pargs) {
   qi_value_t *a = qi_list_data(pargs, 0);
   qi_value_t *a = qi_list_data(pargs, 0);
@@ -3943,7 +4013,7 @@ qi_value_t *qi_builtin_table_get(qi_state_t *state, qi_size_t pargc,
                                  qi_list_t *pargs) {
                                  qi_list_t *pargs) {
   qi_value_t *a = qi_list_data(pargs, 0);
   qi_value_t *a = qi_list_data(pargs, 0);
   qi_value_t *b = qi_list_data(pargs, 1);
   qi_value_t *b = qi_list_data(pargs, 1);
-  qi_value_t *c = pargc >= 3? qi_list_data(pargs, 2): state->nil;
+  qi_value_t *c = pargc >= 3 ? qi_list_data(pargs, 2) : state->nil;
 
 
   if (a->type != QI_TABLE)
   if (a->type != QI_TABLE)
     qi_throw_format(state, "expected first argument to be: table, but got: %s",
     qi_throw_format(state, "expected first argument to be: table, but got: %s",
@@ -4261,6 +4331,7 @@ static void qi_state_setup(qi_state_t *state) {
   qi_add_builtin(state, "unset_pseudomethod", 1, qi_builtin_unset_pseudomethod);
   qi_add_builtin(state, "unset_pseudomethod", 1, qi_builtin_unset_pseudomethod);
 
 
   qi_add_builtin(state, "set_global", 2, qi_builtin_set_global);
   qi_add_builtin(state, "set_global", 2, qi_builtin_set_global);
+  qi_add_builtin(state, "unset_global", 1, qi_builtin_unset_global);
   qi_add_builtin(state, "get_global", 1, qi_builtin_get_global);
   qi_add_builtin(state, "get_global", 1, qi_builtin_get_global);
   qi_add_builtin(state, "get_globals", 0, qi_builtin_get_globals);
   qi_add_builtin(state, "get_globals", 0, qi_builtin_get_globals);
 
 
@@ -4331,7 +4402,6 @@ static void qi_state_setup(qi_state_t *state) {
 static void _qi_state_init(qi_state_t **state, qi_bool enable_debug) {
 static void _qi_state_init(qi_state_t **state, qi_bool enable_debug) {
   GC_INIT();
   GC_INIT();
   GC_set_java_finalization(1);
   GC_set_java_finalization(1);
-  GC_enable_incremental();
   *state = qi_malloc(sizeof(qi_state_t));
   *state = qi_malloc(sizeof(qi_state_t));
   __debug_enabled = enable_debug;
   __debug_enabled = enable_debug;
   qi_state_setup(*state);
   qi_state_setup(*state);

+ 224 - 156
qistd.c

@@ -2667,39 +2667,35 @@ qi_decl(state, "path", qi_list_index(pargs, 0));
 qi_value_t *__qistd444 = qi_call(state, qi_get(state, "fopen"), __qistd445(state));
 qi_value_t *__qistd444 = qi_call(state, qi_get(state, "fopen"), __qistd445(state));
 return __qistd444;return state->nil;
 return __qistd444;return state->nil;
 }
 }
-qi_value_t *__qistd446(qi_state_t *state, qi_size_t pargc, qi_list_t *pargs) {
-qi_decl(state, "cond", qi_list_index(pargs, 0));
-qi_decl(state, "msg", pargc >= 2? qi_list_index(pargs, 1): qi_make_string(state, "assertion failed"));
-qi_new_scope(state);
-if (_qi_truthy(state, qi_not(state, qi_get(state, "cond")))) {
-qi_throw(state, qi_get(state, "msg"));}
-qi_old_scope(state);
-return state->nil;
-}
-qi_value_t *__qistd448(qi_state_t *state, qi_size_t pargc, qi_list_t *pargs) {
-qi_decl(state, "msg", qi_list_index(pargs, 1));
+qi_value_t *__qistd447(qi_state_t *state, qi_size_t pargc, qi_list_t *pargs) {
+qi_decl(state, "msg", pargc >= 2? qi_list_index(pargs, 1): state->nil);
 qi_decl(state, "this", qi_list_index(pargs, 0));
 qi_decl(state, "this", qi_list_index(pargs, 0));
 (void)(qi_index_set(state, false, qi_get(state, "this"), qi_make_string(state, "msg"), qi_get(state, "msg")));
 (void)(qi_index_set(state, false, qi_get(state, "this"), qi_make_string(state, "msg"), qi_get(state, "msg")));
 return state->nil;
 return state->nil;
 }
 }
+inline static qi_list_t *__qistd450(qi_state_t *state) {
+qi_list_t *list = qi_list_make_n(1);
+qi_list_data(list, 0) = qi_get(state, "this");
+return list;
+}
 inline static qi_list_t *__qistd451(qi_state_t *state) {
 inline static qi_list_t *__qistd451(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(1);
 qi_list_t *list = qi_list_make_n(1);
 qi_list_data(list, 0) = qi_get(state, "this");
 qi_list_data(list, 0) = qi_get(state, "this");
 return list;
 return list;
 }
 }
-qi_value_t *__qistd449(qi_state_t *state, qi_size_t pargc, qi_list_t *pargs) {
+qi_value_t *__qistd448(qi_state_t *state, qi_size_t pargc, qi_list_t *pargs) {
 qi_decl(state, "this", qi_list_index(pargs, 0));
 qi_decl(state, "this", qi_list_index(pargs, 0));
-qi_value_t *__qistd450 = qi_add(state, qi_add(state, qi_call(state, qi_get(state, "type"), __qistd451(state)), qi_make_string(state, ": ")), qi_index(state, qi_get(state, "this"), qi_make_string(state, "msg")));
-return __qistd450;return state->nil;
+qi_value_t *__qistd449 = (_qi_truthy(state, qi_is(state, qi_index(state, qi_get(state, "this"), qi_make_string(state, "msg")), state->nil))? qi_call(state, qi_get(state, "type"), __qistd450(state)): qi_add(state, qi_add(state, qi_call(state, qi_get(state, "type"), __qistd451(state)), qi_make_string(state, ": ")), qi_index(state, qi_get(state, "this"), qi_make_string(state, "msg"))));
+return __qistd449;return state->nil;
 }
 }
-qi_value_t *__qistd447(qi_state_t *state) {
+qi_value_t *__qistd446(qi_state_t *state) {
 qi_list_t *supers = qi_list_make_n(0);
 qi_list_t *supers = qi_list_make_n(0);
 qi_table_t *table = qi_table_make();
 qi_table_t *table = qi_table_make();
 qi_table_t *metatable = qi_table_make();
 qi_table_t *metatable = qi_table_make();
 qi_table_t *statictable = qi_table_make();
 qi_table_t *statictable = qi_table_make();
 qi_table_set(metatable, "msg", state->nil);
 qi_table_set(metatable, "msg", state->nil);
-qi_table_set(metatable, "constructor", qi_make_function(state, "Error.constructor", 2, __qistd448, NULL));
-qi_table_set(metatable, "__str", qi_make_function(state, "Error.__str", 1, __qistd449, NULL));
+qi_table_set(metatable, "constructor", qi_make_function(state, "Error.constructor", 1, __qistd447, NULL));
+qi_table_set(metatable, "__str", qi_make_function(state, "Error.__str", 1, __qistd448, NULL));
 qi_list_t *pargs = qi_list_make_n(5);
 qi_list_t *pargs = qi_list_make_n(5);
 qi_list_data(pargs, 0) = qi_make_string(state, "Error");
 qi_list_data(pargs, 0) = qi_make_string(state, "Error");
 qi_list_data(pargs, 1) = qi_make_list(state, supers);
 qi_list_data(pargs, 1) = qi_make_list(state, supers);
@@ -2708,469 +2704,534 @@ qi_list_data(pargs, 3) = qi_make_table(state, metatable);
 qi_list_data(pargs, 4) = qi_make_table(state, statictable);
 qi_list_data(pargs, 4) = qi_make_table(state, statictable);
 return qi_call(state, qi_get(state, "__class_wrapper"), pargs);
 return qi_call(state, qi_get(state, "__class_wrapper"), pargs);
 }
 }
-inline static qi_list_t *__qistd452(qi_state_t *state) {
+qi_value_t *__qistd452(qi_state_t *state) {
+qi_list_t *supers = qi_list_make_n(1);
+qi_list_data(supers, 0) = qi_get(state, "Error");
+qi_table_t *table = qi_table_make();
+qi_table_t *metatable = qi_table_make();
+qi_table_t *statictable = qi_table_make();
+qi_list_t *pargs = qi_list_make_n(5);
+qi_list_data(pargs, 0) = qi_make_string(state, "AssertionError");
+qi_list_data(pargs, 1) = qi_make_list(state, supers);
+qi_list_data(pargs, 2) = qi_make_table(state, table);
+qi_list_data(pargs, 3) = qi_make_table(state, metatable);
+qi_list_data(pargs, 4) = qi_make_table(state, statictable);
+return qi_call(state, qi_get(state, "__class_wrapper"), pargs);
+}
+qi_value_t *__qistd453(qi_state_t *state, qi_size_t pargc, qi_list_t *pargs) {
+qi_decl(state, "cond", qi_list_index(pargs, 0));
+qi_decl(state, "msg", pargc >= 2? qi_list_index(pargs, 1): qi_call(state, qi_get(state, "AssertionError"), NULL));
+qi_new_scope(state);
+if (_qi_truthy(state, qi_not(state, qi_get(state, "cond")))) {
+qi_throw(state, qi_get(state, "msg"));}
+qi_old_scope(state);
+return state->nil;
+}
+inline static qi_list_t *__qistd454(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(2);
 qi_list_t *list = qi_list_make_n(2);
 qi_list_data(list, 0) = qi_make_string(state, "list.reverse");
 qi_list_data(list, 0) = qi_make_string(state, "list.reverse");
 qi_list_data(list, 1) = qi_get(state, "reverse");
 qi_list_data(list, 1) = qi_get(state, "reverse");
 return list;
 return list;
 }
 }
-inline static qi_list_t *__qistd453(qi_state_t *state) {
+inline static qi_list_t *__qistd455(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(2);
 qi_list_t *list = qi_list_make_n(2);
 qi_list_data(list, 0) = qi_make_string(state, "string.reverse");
 qi_list_data(list, 0) = qi_make_string(state, "string.reverse");
 qi_list_data(list, 1) = qi_get(state, "reverse");
 qi_list_data(list, 1) = qi_get(state, "reverse");
 return list;
 return list;
 }
 }
-inline static qi_list_t *__qistd454(qi_state_t *state) {
+inline static qi_list_t *__qistd456(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(2);
 qi_list_t *list = qi_list_make_n(2);
 qi_list_data(list, 0) = qi_make_string(state, "bytes.reverse");
 qi_list_data(list, 0) = qi_make_string(state, "bytes.reverse");
 qi_list_data(list, 1) = qi_get(state, "reverse");
 qi_list_data(list, 1) = qi_get(state, "reverse");
 return list;
 return list;
 }
 }
-inline static qi_list_t *__qistd455(qi_state_t *state) {
+inline static qi_list_t *__qistd457(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(2);
 qi_list_t *list = qi_list_make_n(2);
 qi_list_data(list, 0) = qi_make_string(state, "list.remove");
 qi_list_data(list, 0) = qi_make_string(state, "list.remove");
 qi_list_data(list, 1) = qi_get(state, "list_remove");
 qi_list_data(list, 1) = qi_get(state, "list_remove");
 return list;
 return list;
 }
 }
-inline static qi_list_t *__qistd456(qi_state_t *state) {
+inline static qi_list_t *__qistd458(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(2);
 qi_list_t *list = qi_list_make_n(2);
 qi_list_data(list, 0) = qi_make_string(state, "list.join");
 qi_list_data(list, 0) = qi_make_string(state, "list.join");
 qi_list_data(list, 1) = qi_get(state, "list_join");
 qi_list_data(list, 1) = qi_get(state, "list_join");
 return list;
 return list;
 }
 }
-inline static qi_list_t *__qistd457(qi_state_t *state) {
+inline static qi_list_t *__qistd459(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(2);
 qi_list_t *list = qi_list_make_n(2);
 qi_list_data(list, 0) = qi_make_string(state, "list.popAt");
 qi_list_data(list, 0) = qi_make_string(state, "list.popAt");
 qi_list_data(list, 1) = qi_get(state, "list_pop_at");
 qi_list_data(list, 1) = qi_get(state, "list_pop_at");
 return list;
 return list;
 }
 }
-inline static qi_list_t *__qistd458(qi_state_t *state) {
+inline static qi_list_t *__qistd460(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(2);
 qi_list_t *list = qi_list_make_n(2);
 qi_list_data(list, 0) = qi_make_string(state, "list.sort");
 qi_list_data(list, 0) = qi_make_string(state, "list.sort");
 qi_list_data(list, 1) = qi_get(state, "list_sort");
 qi_list_data(list, 1) = qi_get(state, "list_sort");
 return list;
 return list;
 }
 }
-inline static qi_list_t *__qistd459(qi_state_t *state) {
+inline static qi_list_t *__qistd461(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(2);
 qi_list_t *list = qi_list_make_n(2);
 qi_list_data(list, 0) = qi_make_string(state, "list.sorted");
 qi_list_data(list, 0) = qi_make_string(state, "list.sorted");
 qi_list_data(list, 1) = qi_get(state, "list_sorted");
 qi_list_data(list, 1) = qi_get(state, "list_sorted");
 return list;
 return list;
 }
 }
-inline static qi_list_t *__qistd460(qi_state_t *state) {
+inline static qi_list_t *__qistd462(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(2);
 qi_list_t *list = qi_list_make_n(2);
 qi_list_data(list, 0) = qi_make_string(state, "list.shift");
 qi_list_data(list, 0) = qi_make_string(state, "list.shift");
 qi_list_data(list, 1) = qi_get(state, "list_shift");
 qi_list_data(list, 1) = qi_get(state, "list_shift");
 return list;
 return list;
 }
 }
-inline static qi_list_t *__qistd461(qi_state_t *state) {
+inline static qi_list_t *__qistd463(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(2);
 qi_list_t *list = qi_list_make_n(2);
 qi_list_data(list, 0) = qi_make_string(state, "list.unshift");
 qi_list_data(list, 0) = qi_make_string(state, "list.unshift");
 qi_list_data(list, 1) = qi_get(state, "list_unshift");
 qi_list_data(list, 1) = qi_get(state, "list_unshift");
 return list;
 return list;
 }
 }
-inline static qi_list_t *__qistd462(qi_state_t *state) {
+inline static qi_list_t *__qistd464(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(2);
 qi_list_t *list = qi_list_make_n(2);
 qi_list_data(list, 0) = qi_make_string(state, "list.slice");
 qi_list_data(list, 0) = qi_make_string(state, "list.slice");
 qi_list_data(list, 1) = qi_get(state, "slice");
 qi_list_data(list, 1) = qi_get(state, "slice");
 return list;
 return list;
 }
 }
-inline static qi_list_t *__qistd463(qi_state_t *state) {
+inline static qi_list_t *__qistd465(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(2);
 qi_list_t *list = qi_list_make_n(2);
 qi_list_data(list, 0) = qi_make_string(state, "string.slice");
 qi_list_data(list, 0) = qi_make_string(state, "string.slice");
 qi_list_data(list, 1) = qi_get(state, "slice");
 qi_list_data(list, 1) = qi_get(state, "slice");
 return list;
 return list;
 }
 }
-inline static qi_list_t *__qistd464(qi_state_t *state) {
+inline static qi_list_t *__qistd466(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(2);
 qi_list_t *list = qi_list_make_n(2);
 qi_list_data(list, 0) = qi_make_string(state, "bytes.slice");
 qi_list_data(list, 0) = qi_make_string(state, "bytes.slice");
 qi_list_data(list, 1) = qi_get(state, "slice");
 qi_list_data(list, 1) = qi_get(state, "slice");
 return list;
 return list;
 }
 }
-inline static qi_list_t *__qistd465(qi_state_t *state) {
+inline static qi_list_t *__qistd467(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(2);
 qi_list_t *list = qi_list_make_n(2);
 qi_list_data(list, 0) = qi_make_string(state, "string.startsWith");
 qi_list_data(list, 0) = qi_make_string(state, "string.startsWith");
 qi_list_data(list, 1) = qi_get(state, "str_startswith");
 qi_list_data(list, 1) = qi_get(state, "str_startswith");
 return list;
 return list;
 }
 }
-inline static qi_list_t *__qistd466(qi_state_t *state) {
+inline static qi_list_t *__qistd468(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(2);
 qi_list_t *list = qi_list_make_n(2);
 qi_list_data(list, 0) = qi_make_string(state, "string.endsWith");
 qi_list_data(list, 0) = qi_make_string(state, "string.endsWith");
 qi_list_data(list, 1) = qi_get(state, "str_endswith");
 qi_list_data(list, 1) = qi_get(state, "str_endswith");
 return list;
 return list;
 }
 }
-inline static qi_list_t *__qistd467(qi_state_t *state) {
+inline static qi_list_t *__qistd469(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(2);
 qi_list_t *list = qi_list_make_n(2);
 qi_list_data(list, 0) = qi_make_string(state, "string.split");
 qi_list_data(list, 0) = qi_make_string(state, "string.split");
 qi_list_data(list, 1) = qi_get(state, "str_split");
 qi_list_data(list, 1) = qi_get(state, "str_split");
 return list;
 return list;
 }
 }
-inline static qi_list_t *__qistd468(qi_state_t *state) {
+inline static qi_list_t *__qistd470(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(2);
 qi_list_t *list = qi_list_make_n(2);
 qi_list_data(list, 0) = qi_make_string(state, "string.replace");
 qi_list_data(list, 0) = qi_make_string(state, "string.replace");
 qi_list_data(list, 1) = qi_get(state, "str_replace");
 qi_list_data(list, 1) = qi_get(state, "str_replace");
 return list;
 return list;
 }
 }
-inline static qi_list_t *__qistd469(qi_state_t *state) {
+inline static qi_list_t *__qistd471(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(2);
 qi_list_t *list = qi_list_make_n(2);
 qi_list_data(list, 0) = qi_make_string(state, "table.keys");
 qi_list_data(list, 0) = qi_make_string(state, "table.keys");
 qi_list_data(list, 1) = qi_get(state, "table_keys");
 qi_list_data(list, 1) = qi_get(state, "table_keys");
 return list;
 return list;
 }
 }
-inline static qi_list_t *__qistd470(qi_state_t *state) {
+inline static qi_list_t *__qistd472(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(2);
 qi_list_t *list = qi_list_make_n(2);
 qi_list_data(list, 0) = qi_make_string(state, "table.values");
 qi_list_data(list, 0) = qi_make_string(state, "table.values");
 qi_list_data(list, 1) = qi_get(state, "table_values");
 qi_list_data(list, 1) = qi_get(state, "table_values");
 return list;
 return list;
 }
 }
-inline static qi_list_t *__qistd474(qi_state_t *state) {
+inline static qi_list_t *__qistd476(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(2);
 qi_list_t *list = qi_list_make_n(2);
 qi_list_data(list, 0) = qi_get(state, "f");
 qi_list_data(list, 0) = qi_get(state, "f");
 qi_list_data(list, 1) = qi_get(state, "xs");
 qi_list_data(list, 1) = qi_get(state, "xs");
 return list;
 return list;
 }
 }
-qi_value_t *__qistd472(qi_state_t *state, qi_size_t pargc, qi_list_t *pargs) {
+qi_value_t *__qistd474(qi_state_t *state, qi_size_t pargc, qi_list_t *pargs) {
 qi_decl(state, "f", qi_list_index(pargs, 1));
 qi_decl(state, "f", qi_list_index(pargs, 1));
 qi_decl(state, "xs", qi_list_index(pargs, 0));
 qi_decl(state, "xs", qi_list_index(pargs, 0));
-qi_value_t *__qistd473 = qi_call(state, qi_get(state, "reduce"), __qistd474(state));
-return __qistd473;return state->nil;
+qi_value_t *__qistd475 = qi_call(state, qi_get(state, "reduce"), __qistd476(state));
+return __qistd475;return state->nil;
 }
 }
-inline static qi_list_t *__qistd471(qi_state_t *state) {
+inline static qi_list_t *__qistd473(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(2);
 qi_list_t *list = qi_list_make_n(2);
 qi_list_data(list, 0) = qi_make_string(state, "list.reduce");
 qi_list_data(list, 0) = qi_make_string(state, "list.reduce");
-qi_list_data(list, 1) = qi_make_function(state, "<anon>", 2, __qistd472, NULL);
+qi_list_data(list, 1) = qi_make_function(state, "<anon>", 2, __qistd474, NULL);
 return list;
 return list;
 }
 }
-inline static qi_list_t *__qistd478(qi_state_t *state) {
+inline static qi_list_t *__qistd480(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(2);
 qi_list_t *list = qi_list_make_n(2);
 qi_list_data(list, 0) = qi_get(state, "f");
 qi_list_data(list, 0) = qi_get(state, "f");
 qi_list_data(list, 1) = qi_get(state, "xs");
 qi_list_data(list, 1) = qi_get(state, "xs");
 return list;
 return list;
 }
 }
-qi_value_t *__qistd476(qi_state_t *state, qi_size_t pargc, qi_list_t *pargs) {
+qi_value_t *__qistd478(qi_state_t *state, qi_size_t pargc, qi_list_t *pargs) {
 qi_decl(state, "f", qi_list_index(pargs, 1));
 qi_decl(state, "f", qi_list_index(pargs, 1));
 qi_decl(state, "xs", qi_list_index(pargs, 0));
 qi_decl(state, "xs", qi_list_index(pargs, 0));
-qi_value_t *__qistd477 = qi_call(state, qi_get(state, "reduce"), __qistd478(state));
-return __qistd477;return state->nil;
+qi_value_t *__qistd479 = qi_call(state, qi_get(state, "reduce"), __qistd480(state));
+return __qistd479;return state->nil;
 }
 }
-inline static qi_list_t *__qistd475(qi_state_t *state) {
+inline static qi_list_t *__qistd477(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(2);
 qi_list_t *list = qi_list_make_n(2);
 qi_list_data(list, 0) = qi_make_string(state, "tuple.reduce");
 qi_list_data(list, 0) = qi_make_string(state, "tuple.reduce");
-qi_list_data(list, 1) = qi_make_function(state, "<anon>", 2, __qistd476, NULL);
+qi_list_data(list, 1) = qi_make_function(state, "<anon>", 2, __qistd478, NULL);
 return list;
 return list;
 }
 }
-inline static qi_list_t *__qistd482(qi_state_t *state) {
+inline static qi_list_t *__qistd484(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(2);
 qi_list_t *list = qi_list_make_n(2);
 qi_list_data(list, 0) = qi_get(state, "f");
 qi_list_data(list, 0) = qi_get(state, "f");
 qi_list_data(list, 1) = qi_get(state, "xs");
 qi_list_data(list, 1) = qi_get(state, "xs");
 return list;
 return list;
 }
 }
-qi_value_t *__qistd480(qi_state_t *state, qi_size_t pargc, qi_list_t *pargs) {
+qi_value_t *__qistd482(qi_state_t *state, qi_size_t pargc, qi_list_t *pargs) {
 qi_decl(state, "f", qi_list_index(pargs, 1));
 qi_decl(state, "f", qi_list_index(pargs, 1));
 qi_decl(state, "xs", qi_list_index(pargs, 0));
 qi_decl(state, "xs", qi_list_index(pargs, 0));
-qi_value_t *__qistd481 = qi_call(state, qi_get(state, "reduce"), __qistd482(state));
-return __qistd481;return state->nil;
+qi_value_t *__qistd483 = qi_call(state, qi_get(state, "reduce"), __qistd484(state));
+return __qistd483;return state->nil;
 }
 }
-inline static qi_list_t *__qistd479(qi_state_t *state) {
+inline static qi_list_t *__qistd481(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(2);
 qi_list_t *list = qi_list_make_n(2);
 qi_list_data(list, 0) = qi_make_string(state, "string.reduce");
 qi_list_data(list, 0) = qi_make_string(state, "string.reduce");
-qi_list_data(list, 1) = qi_make_function(state, "<anon>", 2, __qistd480, NULL);
+qi_list_data(list, 1) = qi_make_function(state, "<anon>", 2, __qistd482, NULL);
 return list;
 return list;
 }
 }
-inline static qi_list_t *__qistd486(qi_state_t *state) {
+inline static qi_list_t *__qistd488(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(2);
 qi_list_t *list = qi_list_make_n(2);
 qi_list_data(list, 0) = qi_get(state, "f");
 qi_list_data(list, 0) = qi_get(state, "f");
 qi_list_data(list, 1) = qi_get(state, "xs");
 qi_list_data(list, 1) = qi_get(state, "xs");
 return list;
 return list;
 }
 }
-qi_value_t *__qistd484(qi_state_t *state, qi_size_t pargc, qi_list_t *pargs) {
+qi_value_t *__qistd486(qi_state_t *state, qi_size_t pargc, qi_list_t *pargs) {
 qi_decl(state, "f", qi_list_index(pargs, 1));
 qi_decl(state, "f", qi_list_index(pargs, 1));
 qi_decl(state, "xs", qi_list_index(pargs, 0));
 qi_decl(state, "xs", qi_list_index(pargs, 0));
-qi_value_t *__qistd485 = qi_call(state, qi_get(state, "reduce"), __qistd486(state));
-return __qistd485;return state->nil;
+qi_value_t *__qistd487 = qi_call(state, qi_get(state, "reduce"), __qistd488(state));
+return __qistd487;return state->nil;
 }
 }
-inline static qi_list_t *__qistd483(qi_state_t *state) {
+inline static qi_list_t *__qistd485(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(2);
 qi_list_t *list = qi_list_make_n(2);
 qi_list_data(list, 0) = qi_make_string(state, "bytes.reduce");
 qi_list_data(list, 0) = qi_make_string(state, "bytes.reduce");
-qi_list_data(list, 1) = qi_make_function(state, "<anon>", 2, __qistd484, NULL);
+qi_list_data(list, 1) = qi_make_function(state, "<anon>", 2, __qistd486, NULL);
 return list;
 return list;
 }
 }
-inline static qi_list_t *__qistd487(qi_state_t *state) {
+inline static qi_list_t *__qistd489(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(2);
 qi_list_t *list = qi_list_make_n(2);
 qi_list_data(list, 0) = qi_make_string(state, "list.sum");
 qi_list_data(list, 0) = qi_make_string(state, "list.sum");
 qi_list_data(list, 1) = qi_get(state, "sum");
 qi_list_data(list, 1) = qi_get(state, "sum");
 return list;
 return list;
 }
 }
-inline static qi_list_t *__qistd488(qi_state_t *state) {
+inline static qi_list_t *__qistd490(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(2);
 qi_list_t *list = qi_list_make_n(2);
 qi_list_data(list, 0) = qi_make_string(state, "tuple.sum");
 qi_list_data(list, 0) = qi_make_string(state, "tuple.sum");
 qi_list_data(list, 1) = qi_get(state, "sum");
 qi_list_data(list, 1) = qi_get(state, "sum");
 return list;
 return list;
 }
 }
-inline static qi_list_t *__qistd489(qi_state_t *state) {
+inline static qi_list_t *__qistd491(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(2);
 qi_list_t *list = qi_list_make_n(2);
 qi_list_data(list, 0) = qi_make_string(state, "list.product");
 qi_list_data(list, 0) = qi_make_string(state, "list.product");
 qi_list_data(list, 1) = qi_get(state, "product");
 qi_list_data(list, 1) = qi_get(state, "product");
 return list;
 return list;
 }
 }
-inline static qi_list_t *__qistd490(qi_state_t *state) {
+inline static qi_list_t *__qistd492(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(2);
 qi_list_t *list = qi_list_make_n(2);
 qi_list_data(list, 0) = qi_make_string(state, "tuple.product");
 qi_list_data(list, 0) = qi_make_string(state, "tuple.product");
 qi_list_data(list, 1) = qi_get(state, "product");
 qi_list_data(list, 1) = qi_get(state, "product");
 return list;
 return list;
 }
 }
-inline static qi_list_t *__qistd491(qi_state_t *state) {
+inline static qi_list_t *__qistd493(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(2);
 qi_list_t *list = qi_list_make_n(2);
 qi_list_data(list, 0) = qi_make_string(state, "list.all");
 qi_list_data(list, 0) = qi_make_string(state, "list.all");
 qi_list_data(list, 1) = qi_get(state, "all");
 qi_list_data(list, 1) = qi_get(state, "all");
 return list;
 return list;
 }
 }
-inline static qi_list_t *__qistd492(qi_state_t *state) {
+inline static qi_list_t *__qistd494(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(2);
 qi_list_t *list = qi_list_make_n(2);
 qi_list_data(list, 0) = qi_make_string(state, "tuple.all");
 qi_list_data(list, 0) = qi_make_string(state, "tuple.all");
 qi_list_data(list, 1) = qi_get(state, "all");
 qi_list_data(list, 1) = qi_get(state, "all");
 return list;
 return list;
 }
 }
-inline static qi_list_t *__qistd493(qi_state_t *state) {
+inline static qi_list_t *__qistd495(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(2);
 qi_list_t *list = qi_list_make_n(2);
 qi_list_data(list, 0) = qi_make_string(state, "list.any");
 qi_list_data(list, 0) = qi_make_string(state, "list.any");
 qi_list_data(list, 1) = qi_get(state, "any");
 qi_list_data(list, 1) = qi_get(state, "any");
 return list;
 return list;
 }
 }
-inline static qi_list_t *__qistd494(qi_state_t *state) {
+inline static qi_list_t *__qistd496(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(2);
 qi_list_t *list = qi_list_make_n(2);
 qi_list_data(list, 0) = qi_make_string(state, "tuple.any");
 qi_list_data(list, 0) = qi_make_string(state, "tuple.any");
 qi_list_data(list, 1) = qi_get(state, "any");
 qi_list_data(list, 1) = qi_get(state, "any");
 return list;
 return list;
 }
 }
-inline static qi_list_t *__qistd498(qi_state_t *state) {
+inline static qi_list_t *__qistd500(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(2);
 qi_list_t *list = qi_list_make_n(2);
 qi_list_data(list, 0) = qi_get(state, "f");
 qi_list_data(list, 0) = qi_get(state, "f");
 qi_list_data(list, 1) = qi_get(state, "xs");
 qi_list_data(list, 1) = qi_get(state, "xs");
 return list;
 return list;
 }
 }
-qi_value_t *__qistd496(qi_state_t *state, qi_size_t pargc, qi_list_t *pargs) {
+qi_value_t *__qistd498(qi_state_t *state, qi_size_t pargc, qi_list_t *pargs) {
 qi_decl(state, "f", qi_list_index(pargs, 1));
 qi_decl(state, "f", qi_list_index(pargs, 1));
 qi_decl(state, "xs", qi_list_index(pargs, 0));
 qi_decl(state, "xs", qi_list_index(pargs, 0));
-qi_value_t *__qistd497 = qi_call(state, qi_get(state, "map"), __qistd498(state));
-return __qistd497;return state->nil;
+qi_value_t *__qistd499 = qi_call(state, qi_get(state, "map"), __qistd500(state));
+return __qistd499;return state->nil;
 }
 }
-inline static qi_list_t *__qistd495(qi_state_t *state) {
+inline static qi_list_t *__qistd497(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(2);
 qi_list_t *list = qi_list_make_n(2);
 qi_list_data(list, 0) = qi_make_string(state, "list.map");
 qi_list_data(list, 0) = qi_make_string(state, "list.map");
-qi_list_data(list, 1) = qi_make_function(state, "<anon>", 2, __qistd496, NULL);
+qi_list_data(list, 1) = qi_make_function(state, "<anon>", 2, __qistd498, NULL);
 return list;
 return list;
 }
 }
-inline static qi_list_t *__qistd502(qi_state_t *state) {
+inline static qi_list_t *__qistd504(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(2);
 qi_list_t *list = qi_list_make_n(2);
 qi_list_data(list, 0) = qi_get(state, "f");
 qi_list_data(list, 0) = qi_get(state, "f");
 qi_list_data(list, 1) = qi_get(state, "xs");
 qi_list_data(list, 1) = qi_get(state, "xs");
 return list;
 return list;
 }
 }
-qi_value_t *__qistd500(qi_state_t *state, qi_size_t pargc, qi_list_t *pargs) {
+qi_value_t *__qistd502(qi_state_t *state, qi_size_t pargc, qi_list_t *pargs) {
 qi_decl(state, "f", qi_list_index(pargs, 1));
 qi_decl(state, "f", qi_list_index(pargs, 1));
 qi_decl(state, "xs", qi_list_index(pargs, 0));
 qi_decl(state, "xs", qi_list_index(pargs, 0));
-qi_value_t *__qistd501 = qi_call(state, qi_get(state, "map"), __qistd502(state));
-return __qistd501;return state->nil;
+qi_value_t *__qistd503 = qi_call(state, qi_get(state, "map"), __qistd504(state));
+return __qistd503;return state->nil;
 }
 }
-inline static qi_list_t *__qistd499(qi_state_t *state) {
+inline static qi_list_t *__qistd501(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(2);
 qi_list_t *list = qi_list_make_n(2);
 qi_list_data(list, 0) = qi_make_string(state, "tuple.map");
 qi_list_data(list, 0) = qi_make_string(state, "tuple.map");
-qi_list_data(list, 1) = qi_make_function(state, "<anon>", 2, __qistd500, NULL);
+qi_list_data(list, 1) = qi_make_function(state, "<anon>", 2, __qistd502, NULL);
 return list;
 return list;
 }
 }
-inline static qi_list_t *__qistd506(qi_state_t *state) {
+inline static qi_list_t *__qistd508(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(2);
 qi_list_t *list = qi_list_make_n(2);
 qi_list_data(list, 0) = qi_get(state, "f");
 qi_list_data(list, 0) = qi_get(state, "f");
 qi_list_data(list, 1) = qi_get(state, "xs");
 qi_list_data(list, 1) = qi_get(state, "xs");
 return list;
 return list;
 }
 }
-qi_value_t *__qistd504(qi_state_t *state, qi_size_t pargc, qi_list_t *pargs) {
+qi_value_t *__qistd506(qi_state_t *state, qi_size_t pargc, qi_list_t *pargs) {
 qi_decl(state, "f", qi_list_index(pargs, 1));
 qi_decl(state, "f", qi_list_index(pargs, 1));
 qi_decl(state, "xs", qi_list_index(pargs, 0));
 qi_decl(state, "xs", qi_list_index(pargs, 0));
-qi_value_t *__qistd505 = qi_call(state, qi_get(state, "map"), __qistd506(state));
-return __qistd505;return state->nil;
+qi_value_t *__qistd507 = qi_call(state, qi_get(state, "map"), __qistd508(state));
+return __qistd507;return state->nil;
 }
 }
-inline static qi_list_t *__qistd503(qi_state_t *state) {
+inline static qi_list_t *__qistd505(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(2);
 qi_list_t *list = qi_list_make_n(2);
 qi_list_data(list, 0) = qi_make_string(state, "string.map");
 qi_list_data(list, 0) = qi_make_string(state, "string.map");
-qi_list_data(list, 1) = qi_make_function(state, "<anon>", 2, __qistd504, NULL);
+qi_list_data(list, 1) = qi_make_function(state, "<anon>", 2, __qistd506, NULL);
 return list;
 return list;
 }
 }
-inline static qi_list_t *__qistd510(qi_state_t *state) {
+inline static qi_list_t *__qistd512(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(2);
 qi_list_t *list = qi_list_make_n(2);
 qi_list_data(list, 0) = qi_get(state, "f");
 qi_list_data(list, 0) = qi_get(state, "f");
 qi_list_data(list, 1) = qi_get(state, "xs");
 qi_list_data(list, 1) = qi_get(state, "xs");
 return list;
 return list;
 }
 }
-qi_value_t *__qistd508(qi_state_t *state, qi_size_t pargc, qi_list_t *pargs) {
+qi_value_t *__qistd510(qi_state_t *state, qi_size_t pargc, qi_list_t *pargs) {
 qi_decl(state, "f", qi_list_index(pargs, 1));
 qi_decl(state, "f", qi_list_index(pargs, 1));
 qi_decl(state, "xs", qi_list_index(pargs, 0));
 qi_decl(state, "xs", qi_list_index(pargs, 0));
-qi_value_t *__qistd509 = qi_call(state, qi_get(state, "map"), __qistd510(state));
-return __qistd509;return state->nil;
+qi_value_t *__qistd511 = qi_call(state, qi_get(state, "map"), __qistd512(state));
+return __qistd511;return state->nil;
 }
 }
-inline static qi_list_t *__qistd507(qi_state_t *state) {
+inline static qi_list_t *__qistd509(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(2);
 qi_list_t *list = qi_list_make_n(2);
 qi_list_data(list, 0) = qi_make_string(state, "bytes.map");
 qi_list_data(list, 0) = qi_make_string(state, "bytes.map");
-qi_list_data(list, 1) = qi_make_function(state, "<anon>", 2, __qistd508, NULL);
+qi_list_data(list, 1) = qi_make_function(state, "<anon>", 2, __qistd510, NULL);
 return list;
 return list;
 }
 }
-inline static qi_list_t *__qistd514(qi_state_t *state) {
+inline static qi_list_t *__qistd516(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(2);
 qi_list_t *list = qi_list_make_n(2);
 qi_list_data(list, 0) = qi_get(state, "f");
 qi_list_data(list, 0) = qi_get(state, "f");
 qi_list_data(list, 1) = qi_get(state, "xs");
 qi_list_data(list, 1) = qi_get(state, "xs");
 return list;
 return list;
 }
 }
-qi_value_t *__qistd512(qi_state_t *state, qi_size_t pargc, qi_list_t *pargs) {
+qi_value_t *__qistd514(qi_state_t *state, qi_size_t pargc, qi_list_t *pargs) {
 qi_decl(state, "f", qi_list_index(pargs, 1));
 qi_decl(state, "f", qi_list_index(pargs, 1));
 qi_decl(state, "xs", qi_list_index(pargs, 0));
 qi_decl(state, "xs", qi_list_index(pargs, 0));
-qi_value_t *__qistd513 = qi_call(state, qi_get(state, "filter"), __qistd514(state));
-return __qistd513;return state->nil;
+qi_value_t *__qistd515 = qi_call(state, qi_get(state, "filter"), __qistd516(state));
+return __qistd515;return state->nil;
 }
 }
-inline static qi_list_t *__qistd511(qi_state_t *state) {
+inline static qi_list_t *__qistd513(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(2);
 qi_list_t *list = qi_list_make_n(2);
 qi_list_data(list, 0) = qi_make_string(state, "list.filter");
 qi_list_data(list, 0) = qi_make_string(state, "list.filter");
-qi_list_data(list, 1) = qi_make_function(state, "<anon>", 2, __qistd512, NULL);
+qi_list_data(list, 1) = qi_make_function(state, "<anon>", 2, __qistd514, NULL);
 return list;
 return list;
 }
 }
-inline static qi_list_t *__qistd518(qi_state_t *state) {
+inline static qi_list_t *__qistd520(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(2);
 qi_list_t *list = qi_list_make_n(2);
 qi_list_data(list, 0) = qi_get(state, "f");
 qi_list_data(list, 0) = qi_get(state, "f");
 qi_list_data(list, 1) = qi_get(state, "xs");
 qi_list_data(list, 1) = qi_get(state, "xs");
 return list;
 return list;
 }
 }
-qi_value_t *__qistd516(qi_state_t *state, qi_size_t pargc, qi_list_t *pargs) {
+qi_value_t *__qistd518(qi_state_t *state, qi_size_t pargc, qi_list_t *pargs) {
 qi_decl(state, "f", qi_list_index(pargs, 1));
 qi_decl(state, "f", qi_list_index(pargs, 1));
 qi_decl(state, "xs", qi_list_index(pargs, 0));
 qi_decl(state, "xs", qi_list_index(pargs, 0));
-qi_value_t *__qistd517 = qi_call(state, qi_get(state, "filter"), __qistd518(state));
-return __qistd517;return state->nil;
+qi_value_t *__qistd519 = qi_call(state, qi_get(state, "filter"), __qistd520(state));
+return __qistd519;return state->nil;
 }
 }
-inline static qi_list_t *__qistd515(qi_state_t *state) {
+inline static qi_list_t *__qistd517(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(2);
 qi_list_t *list = qi_list_make_n(2);
 qi_list_data(list, 0) = qi_make_string(state, "tuple.filter");
 qi_list_data(list, 0) = qi_make_string(state, "tuple.filter");
-qi_list_data(list, 1) = qi_make_function(state, "<anon>", 2, __qistd516, NULL);
+qi_list_data(list, 1) = qi_make_function(state, "<anon>", 2, __qistd518, NULL);
 return list;
 return list;
 }
 }
-inline static qi_list_t *__qistd522(qi_state_t *state) {
+inline static qi_list_t *__qistd524(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(2);
 qi_list_t *list = qi_list_make_n(2);
 qi_list_data(list, 0) = qi_get(state, "f");
 qi_list_data(list, 0) = qi_get(state, "f");
 qi_list_data(list, 1) = qi_get(state, "xs");
 qi_list_data(list, 1) = qi_get(state, "xs");
 return list;
 return list;
 }
 }
-qi_value_t *__qistd520(qi_state_t *state, qi_size_t pargc, qi_list_t *pargs) {
+qi_value_t *__qistd522(qi_state_t *state, qi_size_t pargc, qi_list_t *pargs) {
 qi_decl(state, "f", qi_list_index(pargs, 1));
 qi_decl(state, "f", qi_list_index(pargs, 1));
 qi_decl(state, "xs", qi_list_index(pargs, 0));
 qi_decl(state, "xs", qi_list_index(pargs, 0));
-qi_value_t *__qistd521 = qi_call(state, qi_get(state, "filter"), __qistd522(state));
-return __qistd521;return state->nil;
+qi_value_t *__qistd523 = qi_call(state, qi_get(state, "filter"), __qistd524(state));
+return __qistd523;return state->nil;
 }
 }
-inline static qi_list_t *__qistd519(qi_state_t *state) {
+inline static qi_list_t *__qistd521(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(2);
 qi_list_t *list = qi_list_make_n(2);
 qi_list_data(list, 0) = qi_make_string(state, "string.filter");
 qi_list_data(list, 0) = qi_make_string(state, "string.filter");
-qi_list_data(list, 1) = qi_make_function(state, "<anon>", 2, __qistd520, NULL);
+qi_list_data(list, 1) = qi_make_function(state, "<anon>", 2, __qistd522, NULL);
 return list;
 return list;
 }
 }
-inline static qi_list_t *__qistd526(qi_state_t *state) {
+inline static qi_list_t *__qistd528(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(2);
 qi_list_t *list = qi_list_make_n(2);
 qi_list_data(list, 0) = qi_get(state, "f");
 qi_list_data(list, 0) = qi_get(state, "f");
 qi_list_data(list, 1) = qi_get(state, "xs");
 qi_list_data(list, 1) = qi_get(state, "xs");
 return list;
 return list;
 }
 }
-qi_value_t *__qistd524(qi_state_t *state, qi_size_t pargc, qi_list_t *pargs) {
+qi_value_t *__qistd526(qi_state_t *state, qi_size_t pargc, qi_list_t *pargs) {
 qi_decl(state, "f", qi_list_index(pargs, 1));
 qi_decl(state, "f", qi_list_index(pargs, 1));
 qi_decl(state, "xs", qi_list_index(pargs, 0));
 qi_decl(state, "xs", qi_list_index(pargs, 0));
-qi_value_t *__qistd525 = qi_call(state, qi_get(state, "filter"), __qistd526(state));
-return __qistd525;return state->nil;
+qi_value_t *__qistd527 = qi_call(state, qi_get(state, "filter"), __qistd528(state));
+return __qistd527;return state->nil;
 }
 }
-inline static qi_list_t *__qistd523(qi_state_t *state) {
+inline static qi_list_t *__qistd525(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(2);
 qi_list_t *list = qi_list_make_n(2);
 qi_list_data(list, 0) = qi_make_string(state, "bytes.filter");
 qi_list_data(list, 0) = qi_make_string(state, "bytes.filter");
-qi_list_data(list, 1) = qi_make_function(state, "<anon>", 2, __qistd524, NULL);
+qi_list_data(list, 1) = qi_make_function(state, "<anon>", 2, __qistd526, NULL);
 return list;
 return list;
 }
 }
-inline static qi_list_t *__qistd527(qi_state_t *state) {
+inline static qi_list_t *__qistd529(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(2);
 qi_list_t *list = qi_list_make_n(2);
 qi_list_data(list, 0) = qi_make_string(state, "string.index");
 qi_list_data(list, 0) = qi_make_string(state, "string.index");
 qi_list_data(list, 1) = qi_get(state, "str_index");
 qi_list_data(list, 1) = qi_get(state, "str_index");
 return list;
 return list;
 }
 }
-inline static qi_list_t *__qistd528(qi_state_t *state) {
+inline static qi_list_t *__qistd530(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(2);
 qi_list_t *list = qi_list_make_n(2);
 qi_list_data(list, 0) = qi_make_string(state, "string.lstrip");
 qi_list_data(list, 0) = qi_make_string(state, "string.lstrip");
 qi_list_data(list, 1) = qi_get(state, "str_lstrip");
 qi_list_data(list, 1) = qi_get(state, "str_lstrip");
 return list;
 return list;
 }
 }
-inline static qi_list_t *__qistd529(qi_state_t *state) {
+inline static qi_list_t *__qistd531(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(2);
 qi_list_t *list = qi_list_make_n(2);
 qi_list_data(list, 0) = qi_make_string(state, "string.rstrip");
 qi_list_data(list, 0) = qi_make_string(state, "string.rstrip");
 qi_list_data(list, 1) = qi_get(state, "str_rstrip");
 qi_list_data(list, 1) = qi_get(state, "str_rstrip");
 return list;
 return list;
 }
 }
-inline static qi_list_t *__qistd530(qi_state_t *state) {
+inline static qi_list_t *__qistd532(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(2);
 qi_list_t *list = qi_list_make_n(2);
 qi_list_data(list, 0) = qi_make_string(state, "string.strip");
 qi_list_data(list, 0) = qi_make_string(state, "string.strip");
 qi_list_data(list, 1) = qi_get(state, "str_strip");
 qi_list_data(list, 1) = qi_get(state, "str_strip");
 return list;
 return list;
 }
 }
-inline static qi_list_t *__qistd531(qi_state_t *state) {
+inline static qi_list_t *__qistd533(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(2);
 qi_list_t *list = qi_list_make_n(2);
 qi_list_data(list, 0) = qi_make_string(state, "string.toupper");
 qi_list_data(list, 0) = qi_make_string(state, "string.toupper");
 qi_list_data(list, 1) = qi_get(state, "str_toupper");
 qi_list_data(list, 1) = qi_get(state, "str_toupper");
 return list;
 return list;
 }
 }
-inline static qi_list_t *__qistd532(qi_state_t *state) {
+inline static qi_list_t *__qistd534(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(2);
 qi_list_t *list = qi_list_make_n(2);
 qi_list_data(list, 0) = qi_make_string(state, "string.tolower");
 qi_list_data(list, 0) = qi_make_string(state, "string.tolower");
 qi_list_data(list, 1) = qi_get(state, "str_tolower");
 qi_list_data(list, 1) = qi_get(state, "str_tolower");
 return list;
 return list;
 }
 }
-inline static qi_list_t *__qistd533(qi_state_t *state) {
+inline static qi_list_t *__qistd535(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(2);
 qi_list_t *list = qi_list_make_n(2);
 qi_list_data(list, 0) = qi_make_string(state, "string.format");
 qi_list_data(list, 0) = qi_make_string(state, "string.format");
 qi_list_data(list, 1) = qi_get(state, "format");
 qi_list_data(list, 1) = qi_get(state, "format");
 return list;
 return list;
 }
 }
-inline static qi_list_t *__qistd534(qi_state_t *state) {
+inline static qi_list_t *__qistd536(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(2);
 qi_list_t *list = qi_list_make_n(2);
 qi_list_data(list, 0) = qi_make_string(state, "string.formatl");
 qi_list_data(list, 0) = qi_make_string(state, "string.formatl");
 qi_list_data(list, 1) = qi_get(state, "formatl");
 qi_list_data(list, 1) = qi_get(state, "formatl");
 return list;
 return list;
 }
 }
-inline static qi_list_t *__qistd535(qi_state_t *state) {
+inline static qi_list_t *__qistd537(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(2);
 qi_list_t *list = qi_list_make_n(2);
 qi_list_data(list, 0) = qi_make_string(state, "string.formatd");
 qi_list_data(list, 0) = qi_make_string(state, "string.formatd");
 qi_list_data(list, 1) = qi_get(state, "formatd");
 qi_list_data(list, 1) = qi_get(state, "formatd");
 return list;
 return list;
 }
 }
-qi_value_t *__qistd537(qi_state_t *state, qi_size_t pargc, qi_list_t *pargs) {
+qi_value_t *__qistd539(qi_state_t *state, qi_size_t pargc, qi_list_t *pargs) {
 return state->nil;
 return state->nil;
 }
 }
-inline static qi_list_t *__qistd536(qi_state_t *state) {
+inline static qi_list_t *__qistd538(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(2);
 qi_list_t *list = qi_list_make_n(2);
 qi_list_data(list, 0) = qi_make_string(state, "file.__enter");
 qi_list_data(list, 0) = qi_make_string(state, "file.__enter");
-qi_list_data(list, 1) = qi_make_function(state, "<anon>", 0, __qistd537, NULL);
+qi_list_data(list, 1) = qi_make_function(state, "<anon>", 0, __qistd539, NULL);
 return list;
 return list;
 }
 }
-inline static qi_list_t *__qistd541(qi_state_t *state) {
+inline static qi_list_t *__qistd543(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(1);
 qi_list_t *list = qi_list_make_n(1);
 qi_list_data(list, 0) = qi_get(state, "f");
 qi_list_data(list, 0) = qi_get(state, "f");
 return list;
 return list;
 }
 }
-qi_value_t *__qistd539(qi_state_t *state, qi_size_t pargc, qi_list_t *pargs) {
+qi_value_t *__qistd541(qi_state_t *state, qi_size_t pargc, qi_list_t *pargs) {
 qi_decl(state, "f", qi_list_index(pargs, 0));
 qi_decl(state, "f", qi_list_index(pargs, 0));
-qi_value_t *__qistd540 = qi_call(state, qi_get(state, "fclose"), __qistd541(state));
-return __qistd540;return state->nil;
+qi_value_t *__qistd542 = qi_call(state, qi_get(state, "fclose"), __qistd543(state));
+return __qistd542;return state->nil;
 }
 }
-inline static qi_list_t *__qistd538(qi_state_t *state) {
+inline static qi_list_t *__qistd540(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(2);
 qi_list_t *list = qi_list_make_n(2);
 qi_list_data(list, 0) = qi_make_string(state, "file.__leave");
 qi_list_data(list, 0) = qi_make_string(state, "file.__leave");
-qi_list_data(list, 1) = qi_make_function(state, "<anon>", 1, __qistd539, NULL);
+qi_list_data(list, 1) = qi_make_function(state, "<anon>", 1, __qistd541, NULL);
 return list;
 return list;
 }
 }
-inline static qi_list_t *__qistd542(qi_state_t *state) {
+inline static qi_list_t *__qistd544(qi_state_t *state) {
 qi_list_t *list = qi_list_make_n(2);
 qi_list_t *list = qi_list_make_n(2);
 qi_list_data(list, 0) = qi_make_string(state, "file.close");
 qi_list_data(list, 0) = qi_make_string(state, "file.close");
 qi_list_data(list, 1) = qi_get(state, "fclose");
 qi_list_data(list, 1) = qi_get(state, "fclose");
 return list;
 return list;
 }
 }
+inline static qi_list_t *__qistd545(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 *__qistd546(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 *__qistd547(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 *__qistd548(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 *__qistd549(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 *__qistd550(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 *__qistd551(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;
+}
 static void qi_init_std(qi_state_t *state) {
 static void qi_init_std(qi_state_t *state) {
 qi_set(state, false, "head", qi_make_function(state, "head", 1, __qistd0, NULL));
 qi_set(state, false, "head", qi_make_function(state, "head", 1, __qistd0, NULL));
 qi_set(state, false, "tail", qi_make_function(state, "tail", 1, __qistd2, NULL));
 qi_set(state, false, "tail", qi_make_function(state, "tail", 1, __qistd2, NULL));
@@ -3223,15 +3284,13 @@ qi_set(state, false, "putch", qi_make_function(state, "putch", 1, __qistd433, NU
 qi_set(state, false, "getline", qi_make_function(state, "getline", 0, __qistd435, NULL));
 qi_set(state, false, "getline", qi_make_function(state, "getline", 0, __qistd435, NULL));
 qi_set(state, false, "input", qi_make_function(state, "input", 0, __qistd438, NULL));
 qi_set(state, false, "input", qi_make_function(state, "input", 0, __qistd438, NULL));
 qi_set(state, false, "open", qi_make_function(state, "open", 1, __qistd443, NULL));
 qi_set(state, false, "open", qi_make_function(state, "open", 1, __qistd443, NULL));
-qi_set(state, false, "assert", qi_make_function(state, "assert", 1, __qistd446, NULL));
-qi_set(state, false, "Error", __qistd447(state));(void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd452(state)));
-(void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd453(state)));
+qi_set(state, false, "Error", __qistd446(state));qi_set(state, false, "AssertionError", __qistd452(state));qi_set(state, false, "assert", qi_make_function(state, "assert", 1, __qistd453, NULL));
 (void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd454(state)));
 (void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd454(state)));
+(void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd455(state)));
+(void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd456(state)));
 qi_decl_const(state, "SEEK_END", qi_make_number(state, 2));
 qi_decl_const(state, "SEEK_END", qi_make_number(state, 2));
 qi_decl_const(state, "SEEK_CUR", qi_make_number(state, 1));
 qi_decl_const(state, "SEEK_CUR", qi_make_number(state, 1));
 qi_decl_const(state, "SEEK_SET", qi_make_number(state, 0));
 qi_decl_const(state, "SEEK_SET", qi_make_number(state, 0));
-(void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd455(state)));
-(void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd456(state)));
 (void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd457(state)));
 (void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd457(state)));
 (void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd458(state)));
 (void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd458(state)));
 (void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd459(state)));
 (void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd459(state)));
@@ -3240,19 +3299,19 @@ qi_decl_const(state, "SEEK_SET", qi_make_number(state, 0));
 (void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd462(state)));
 (void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd462(state)));
 (void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd463(state)));
 (void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd463(state)));
 (void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd464(state)));
 (void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd464(state)));
-qi_decl_const(state, "__slice", qi_get(state, "slice"));
 (void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd465(state)));
 (void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd465(state)));
 (void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd466(state)));
 (void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd466(state)));
+qi_decl_const(state, "__slice", qi_get(state, "slice"));
 (void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd467(state)));
 (void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd467(state)));
 (void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd468(state)));
 (void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd468(state)));
 (void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd469(state)));
 (void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd469(state)));
 (void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd470(state)));
 (void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd470(state)));
 (void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd471(state)));
 (void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd471(state)));
-(void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd475(state)));
-(void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd479(state)));
-(void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd483(state)));
-(void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd487(state)));
-(void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd488(state)));
+(void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd472(state)));
+(void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd473(state)));
+(void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd477(state)));
+(void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd481(state)));
+(void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd485(state)));
 (void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd489(state)));
 (void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd489(state)));
 (void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd490(state)));
 (void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd490(state)));
 (void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd491(state)));
 (void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd491(state)));
@@ -3260,15 +3319,15 @@ qi_decl_const(state, "__slice", qi_get(state, "slice"));
 (void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd493(state)));
 (void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd493(state)));
 (void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd494(state)));
 (void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd494(state)));
 (void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd495(state)));
 (void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd495(state)));
-(void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd499(state)));
-(void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd503(state)));
-(void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd507(state)));
-(void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd511(state)));
-(void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd515(state)));
-(void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd519(state)));
-(void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd523(state)));
-(void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd527(state)));
-(void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd528(state)));
+(void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd496(state)));
+(void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd497(state)));
+(void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd501(state)));
+(void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd505(state)));
+(void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd509(state)));
+(void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd513(state)));
+(void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd517(state)));
+(void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd521(state)));
+(void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd525(state)));
 (void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd529(state)));
 (void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd529(state)));
 (void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd530(state)));
 (void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd530(state)));
 (void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd531(state)));
 (void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd531(state)));
@@ -3277,6 +3336,15 @@ qi_decl_const(state, "__slice", qi_get(state, "slice"));
 (void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd534(state)));
 (void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd534(state)));
 (void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd535(state)));
 (void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd535(state)));
 (void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd536(state)));
 (void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd536(state)));
+(void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd537(state)));
 (void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd538(state)));
 (void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd538(state)));
-(void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd542(state)));
+(void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd540(state)));
+(void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd544(state)));
+(void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd545(state)));
+(void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd546(state)));
+(void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd547(state)));
+(void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd548(state)));
+(void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd549(state)));
+(void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd550(state)));
+(void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd551(state)));
 }
 }

+ 13 - 5
std.qi

@@ -516,15 +516,23 @@ func open(path, mode="r"): fopen(path, mode)
 set_pseudomethod("file.__enter", func () {})
 set_pseudomethod("file.__enter", func () {})
 set_pseudomethod("file.__leave", func (f): fclose(f))
 set_pseudomethod("file.__leave", func (f): fclose(f))
 set_pseudomethod("file.close", fclose)
 set_pseudomethod("file.close", fclose)
-func assert(cond, msg="assertion failed")
-  if !cond
-    throw msg
+set_pseudomethod("file.flush", fflush)
+set_pseudomethod("file.seek", fseek)
+set_pseudomethod("file.getc", fgetc)
+set_pseudomethod("file.putc", fputc)
+set_pseudomethod("file.gets", fgets)
+set_pseudomethod("file.puts", fputs)
+set_pseudomethod("file.tell", ftell)
 class Error {
 class Error {
   msg = nil
   msg = nil
 
 
-  constructor (this, msg) {
+  constructor (this, msg=nil) {
     this.msg = msg
     this.msg = msg
   }
   }
 
 
-  __str (this): type(this) + ": " + this.msg
+  __str (this): this.msg is nil? type(this): type(this) + ": " + this.msg
 }
 }
+class AssertionError(Error)
+func assert(cond, msg=AssertionError())
+  if !cond
+    throw msg