From 23fca6ac0e97542f1cd5070a7b953879b32f51e3 Mon Sep 17 00:00:00 2001 From: Brendan Hansen Date: Fri, 7 Oct 2022 13:19:08 -0500 Subject: [PATCH] added `iter.comp`; vscode syntax bugfix --- compiler/src/onyx.c | 15 +++++++++++ core/container/iter.onyx | 38 +++++++++++++++++++++++++++ misc/vscode/onyx-0.0.4.vsix | Bin 703200 -> 703199 bytes misc/vscode/syntaxes/onyx.tmLanguage | 2 +- 4 files changed, 54 insertions(+), 1 deletion(-) diff --git a/compiler/src/onyx.c b/compiler/src/onyx.c index 4e7540c5..6f908e66 100644 --- a/compiler/src/onyx.c +++ b/compiler/src/onyx.c @@ -609,6 +609,21 @@ static i32 onyx_compile() { } #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(); diff --git a/core/container/iter.onyx b/core/container/iter.onyx index 87988f21..b3516fdc 100644 --- a/core/container/iter.onyx +++ b/core/container/iter.onyx @@ -634,6 +634,44 @@ to_array :: (it: Iterator($T), allocator := context.allocator) -> [..] T { 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 diff --git a/misc/vscode/onyx-0.0.4.vsix b/misc/vscode/onyx-0.0.4.vsix index 6f7437f6e466196e11cd967a5eeaa3dbdcb7a684..2c47d8835c0bc49bc165a2c734220f0178904992 100644 GIT binary patch delta 6660 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 A7ytkO delta 6887 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 Jf;qvI{vSH!JWBuo diff --git a/misc/vscode/syntaxes/onyx.tmLanguage b/misc/vscode/syntaxes/onyx.tmLanguage index b35555aa..236b2be9 100644 --- a/misc/vscode/syntaxes/onyx.tmLanguage +++ b/misc/vscode/syntaxes/onyx.tmLanguage @@ -220,7 +220,7 @@ match - @[^\s;]+ + @[^\n]+ name keyword.tag.onyx -- 2.25.1