}
#endif
+ /*
+ struct timespec spec;
+ clock_gettime(CLOCK_REALTIME, &spec);
+ u64 nano_time = spec.tv_nsec + 1000000000 * (spec.tv_sec % 100);
+ printf("%lu %d %d %d %d %d %d %d\n",
+ nano_time,
+ bh_arr_length(context.entities.entities),
+ context.entities.state_count[Entity_State_Introduce_Symbols],
+ context.entities.state_count[Entity_State_Parse],
+ context.entities.state_count[Entity_State_Resolve_Symbols],
+ context.entities.state_count[Entity_State_Check_Types],
+ context.entities.state_count[Entity_State_Code_Gen],
+ context.entities.state_count[Entity_State_Finalized]);
+ */
+
// Mostly a preventative thing to ensure that even if somehow
// errors were left disabled, they are re-enabled in this cycle.
onyx_errors_enable();
return arr;
}
+//
+// Simple iterator comprehensions, in the same vein
+// as Pythons comprehension syntax.
+//
+// Python:
+// results = [it * 2 for it in [1, 2, 3, 4, 5]]
+// Onyx:
+// results := iter.comp(u32.[1, 2, 3, 4, 5], #(it * 2));
+comp :: #match #local {}
+
+#overload
+comp :: macro (i: Iterator(^$V), value: Code) => {
+ it: V;
+ a := make([..] typeof #unquote value);
+
+ for __it: i {
+ it := *__it;
+ a << (#unquote value);
+ }
+ return a;
+}
+
+#overload
+comp :: macro (i: Iterator($V), value: Code) => {
+ it: V;
+ a := make([..] typeof #unquote value);
+
+ for i do a << (#unquote value);
+ return a;
+}
+
+#overload
+comp :: macro (i: $I/Iterable, value: Code) => {
+ as_iterator :: as_iterator
+ comp :: comp
+ return comp(as_iterator(i), value);
+}
+
#if runtime.Multi_Threading_Enabled {
#local sync :: core.sync