txlyre 1 week ago
parent
commit
f5e38e5f38
2 changed files with 9 additions and 6 deletions
  1. 6 3
      qistd.c
  2. 3 3
      std.qi

+ 6 - 3
qistd.c

@@ -2242,11 +2242,12 @@ return list;
 }
 }
 inline static qi_list_t *__qistd370(qi_state_t *state) {
 inline static qi_list_t *__qistd370(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_table(state, NULL);
+qi_list_data(list, 0) = qi_get(state, "o");
 qi_list_data(list, 1) = qi_get(state, "t");
 qi_list_data(list, 1) = qi_get(state, "t");
 return list;
 return list;
 }
 }
 qi_value_t *__qistd366(qi_state_t *state, qi_size_t pargc, qi_list_t *pargs) {
 qi_value_t *__qistd366(qi_state_t *state, qi_size_t pargc, qi_list_t *pargs) {
+qi_decl(state, "o", pargc >= 3? qi_list_index(pargs, 2): qi_make_table(state, NULL));
 qi_decl(state, "p", pargc >= 2? qi_list_index(pargs, 1): state->nil);
 qi_decl(state, "p", pargc >= 2? qi_list_index(pargs, 1): state->nil);
 qi_decl(state, "t", qi_list_index(pargs, 0));
 qi_decl(state, "t", qi_list_index(pargs, 0));
 qi_value_t *__qistd367 = (_qi_truthy(state, qi_not_is(state, qi_get(state, "p"), state->nil))? qi_call(state, qi_get(state, "set_meta_table"), __qistd368(state)): qi_call(state, qi_get(state, "set_meta_table"), __qistd370(state)));
 qi_value_t *__qistd367 = (_qi_truthy(state, qi_not_is(state, qi_get(state, "p"), state->nil))? qi_call(state, qi_get(state, "set_meta_table"), __qistd368(state)): qi_call(state, qi_get(state, "set_meta_table"), __qistd370(state)));
@@ -2364,8 +2365,10 @@ qi_table_set(table, qi_to_string(state, qi_make_string(state, "__call"))->value.
 return table;
 return table;
 }
 }
 inline static qi_list_t *__qistd376(qi_state_t *state) {
 inline static qi_list_t *__qistd376(qi_state_t *state) {
-qi_list_t *list = qi_list_make_n(1);
-qi_list_data(list, 0) = qi_add(state, qi_get(state, "st"), qi_make_table(state, __qistd377(state)));
+qi_list_t *list = qi_list_make_n(3);
+qi_list_data(list, 0) = qi_make_table(state, __qistd377(state));
+qi_list_data(list, 1) = state->nil;
+qi_list_data(list, 2) = qi_get(state, "st");
 return list;
 return list;
 }
 }
 qi_value_t *__qistd374(qi_state_t *state, qi_size_t pargc, qi_list_t *pargs) {
 qi_value_t *__qistd374(qi_state_t *state, qi_size_t pargc, qi_list_t *pargs) {

+ 3 - 3
std.qi

@@ -421,9 +421,9 @@ func str_tolower(s) {
   return map(func (c): c >= 'A' && c <= 'Z'? chr(ord(c) + 32): c, s)
   return map(func (c): c >= 'A' && c <= 'Z'? chr(ord(c) + 32): c, s)
 }
 }
 set_pseudomethod("string.tolower", str_tolower)
 set_pseudomethod("string.tolower", str_tolower)
-func Object(t, p=nil): return p !is nil? set_meta_table(p, get_meta_table(p) + t): set_meta_table({}, t)
+func Object(t, p=nil, o={}): return p !is nil? set_meta_table(p, get_meta_table(p) + t): set_meta_table(o, t)
 func is_object(o): return has_meta_table(o)
 func is_object(o): return has_meta_table(o)
-func __class_wrapper(n, p, t, mt, st): return Object(st + {
+func __class_wrapper(n, p, t, mt, st): return Object({
     "t": t,
     "t": t,
     "mt": mt,
     "mt": mt,
     "super": p,
     "super": p,
@@ -444,7 +444,7 @@ func __class_wrapper(n, p, t, mt, st): return Object(st + {
           func_call(mt.constructor, [obj] + pargs)
           func_call(mt.constructor, [obj] + pargs)
         return obj
         return obj
     }
     }
-})
+}, nil, st)
 func format(s) {
 func format(s) {
   if type(s) != "string"
   if type(s) != "string"
     throw "expected first argument to be: string, but got: " + type(s)
     throw "expected first argument to be: string, but got: " + type(s)