txlyre 1 week geleden
bovenliggende
commit
b89292ff4e
3 gewijzigde bestanden met toevoegingen van 281 en 261 verwijderingen
  1. 14 1
      qirt.c
  2. 266 259
      qistd.c
  3. 1 1
      std.qi

+ 14 - 1
qirt.c

@@ -899,7 +899,7 @@ qi_value_t *qi_make_ref(qi_state_t *state, char *name) {
     }
 
   if (!r)
-    qi_throw_format(state, "reference to undefined symbol: '%s'", name);
+    qi_throw_format(state, "reference to an undefined symbol: '%s'", name);
 
   qi_value_t *value = qi_make_value(QI_REFERENCE);
   value->value.ref.name = name;
@@ -4371,6 +4371,18 @@ qi_value_t *qi_builtin_iter_next(qi_state_t *state, qi_size_t pargc,
   return qi_iter_next(state, a);
 }
 
+qi_value_t *qi_builtin_iter_end(qi_state_t *state, qi_size_t pargc,
+                                 qi_list_t *pargs) {
+  qi_value_t *a = qi_list_data(pargs, 0);
+
+  if (!qi_is_iter(state, a))
+    qi_throw_format(state,
+                    "expected first argument to be an iterator, but got: %s",
+                    _qi_type(state, a));
+
+  return qi_make_boolean(state, qi_iter_end(state, a));
+}
+
 qi_value_t *qi_builtin_deref(qi_state_t *state, qi_size_t pargc,
                              qi_list_t *pargs) {
   qi_value_t *a = qi_list_data(pargs, 0);
@@ -4618,6 +4630,7 @@ static void qi_state_setup(qi_state_t *state) {
   qi_add_builtin(state, "ref", 1, qi_builtin_ref);
   qi_add_builtin(state, "iter", 1, qi_builtin_iter);
   qi_add_builtin(state, "iter_next", 1, qi_builtin_iter_next);
+  qi_add_builtin(state, "iter_end", 1, qi_builtin_iter_end);
 
   qi_add_builtin(state, "deref", 1, qi_builtin_deref);
   qi_add_builtin(state, "ref_set", 2, qi_builtin_ref_set);

File diff suppressed because it is too large
+ 266 - 259
qistd.c


+ 1 - 1
std.qi

@@ -437,7 +437,7 @@ func __class_wrapper(n, p, t, mt, st): return Object({
         var mt = { "__type": func (this) use (n): n }
         if p {
           var i = 0
-          while i < len(p) {
+          for i < len(p) {
             t += p[i].t
             mt += p[i].mt
 

Some files were not shown because too many files changed in this diff