txlyre 4 days ago
parent
commit
3e8fe8aaea
2 changed files with 28 additions and 0 deletions
  1. 26 0
      qistd.c
  2. 2 0
      std.qi

+ 26 - 0
qistd.c

@@ -3049,6 +3049,30 @@ 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 *__qistd442(qi_state_t *state, qi_size_t pargc, qi_list_t *pargs) {
+return state->nil;
+}
+inline static qi_list_t *__qistd441(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, __qistd442, NULL);
+return list;
+}
+inline static qi_list_t *__qistd445(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 *__qistd444(qi_state_t *state, qi_size_t pargc, qi_list_t *pargs) {
+qi_decl(state, "f", qi_list_index(pargs, 0));
+return qi_call(state, qi_get(state, "fclose"), __qistd445(state));return state->nil;
+}
+inline static qi_list_t *__qistd443(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, __qistd444, NULL);
+return list;
+}
 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, "tail", qi_make_function(state, "tail", 1, __qistd1, NULL));
@@ -3155,4 +3179,6 @@ qi_decl_const(state, "__slice", qi_get(state, "slice"));
 (void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd438(state)));
 (void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd439(state)));
 (void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd440(state)));
+(void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd441(state)));
+(void)(qi_call(state, qi_get(state, "set_pseudomethod"), __qistd443(state)));
 }

+ 2 - 0
std.qi

@@ -523,6 +523,8 @@ func input() {
   return str_rstrip(getline(), "\n\r")
 }
 func open(path, mode="r"): fopen(path, mode)
+set_pseudomethod("file.__enter", func () {})
+set_pseudomethod("file.__leave", func (f): fclose(f))
 func assert(cond, msg="assertion failed")
   if !cond
     throw msg