From 672e5da77f5f7ed25554963a45d5127489632190 Mon Sep 17 00:00:00 2001 From: Brendan Hansen Date: Fri, 12 Nov 2021 16:10:36 -0600 Subject: [PATCH] updated syntax definitions --- core/container/iter.onyx | 59 ++++++++++++++++++++++----- misc/onyx.vim | 2 +- misc/vscode/onyx-0.0.1.vsix | Bin 3669 -> 3665 bytes misc/vscode/syntaxes/onyx.tmLanguage | 8 ++-- 4 files changed, 53 insertions(+), 16 deletions(-) diff --git a/core/container/iter.onyx b/core/container/iter.onyx index f09f2e2c..dc04d67f 100644 --- a/core/container/iter.onyx +++ b/core/container/iter.onyx @@ -2,6 +2,12 @@ package core.iter use package core.intrinsics.onyx { __zero_value } +as_iterator :: #match {} + +Iterable :: interface (T: type_expr) { + as_iterator(T); +} + close :: (it: Iterator($T)) { it.close(it.data); } @@ -274,6 +280,24 @@ enumerate :: (it: Iterator($T), start_index: i32 = 0) -> Iterator(Enumeration_Va }; } +fold :: (it: Iterator($T), initial_value: R, combine: (T, $R) -> R) -> R { + for value: it { + initial_value = combine(value, initial_value); + } + + return initial_value; +} + +to_array :: (it: Iterator($T), allocator := context.allocator) -> [..] T { + array :: package core.array + + arr := array.make(T, allocator=allocator); + for v: it do array.push(^arr, v); + + return arr; +} + +#match as_iterator from_array from_array :: (arr: [] $T) -> Iterator(^T) { Context :: struct (T: type_expr) { data: ^T; @@ -307,19 +331,32 @@ from_array :: (arr: [] $T) -> Iterator(^T) { }; } -fold :: (it: Iterator($T), initial_value: R, combine: (T, $R) -> R) -> R { - for value: it { - initial_value = combine(value, initial_value); +#match as_iterator (r: range) -> Iterator(i32) { + Context :: struct { + r: range; + v: i32; } - - return initial_value; -} -to_array :: (it: Iterator($T), allocator := context.allocator) -> [..] T { - array :: package core.array + next :: (use c: ^Context) -> (i32, bool) { + if v > r.high { + return 0, false; + } else { + defer v += r.step; + return v, true; + } + } - arr := array.make(T, allocator=allocator); - for v: it do array.push(^arr, v); + close :: (c: ^Context) { + cfree(c); + } - return arr; + c := new(Context); + c.r = r; + c.v = r.low; + + return .{ + data = c, + next = next, + close = close, + }; } diff --git a/misc/onyx.vim b/misc/onyx.vim index 7f750f83..ad510de2 100644 --- a/misc/onyx.vim +++ b/misc/onyx.vim @@ -11,7 +11,7 @@ let s:cpo_save = &cpo set cpo&vim syn keyword onyxKeyword package struct enum proc use global macro -syn keyword onyxKeyword if elseif else +syn keyword onyxKeyword if elseif else where interface syn keyword onyxKeyword for while do syn keyword onyxKeyword switch case syn keyword onyxKeyword break continue return defer fallthrough diff --git a/misc/vscode/onyx-0.0.1.vsix b/misc/vscode/onyx-0.0.1.vsix index 420a7b7850a946bcd1b0b121ffd57b194b5629e0..17a8a2e04d625beb495cc9bd35776b460c5a213f 100644 GIT binary patch delta 2395 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 delta 2393 zcmV-f38wbZ9Mv2bP)h>@6aWAS2msA&TT?tXg(5Zr006d;7bJhZ@2`k*h8R!}6*5_E zciS!M(jr0kSTw{#;*!{r?EvYo?<66CMb&mid&q}JGjC?zJP*G;WU049W2IITe;5pW z4^^avRPn?w+@}BDzYTBr9HK46I0Gd&Xr1@mMvQ_%6+PW;5Ve9V}Q63oB`nT(9K zdgFpfXH4J@Q=NaKVLN;1H$H4M7!Hr&V{rvQU!aw-YH-3E&*L+6AizO&pyO1aa?+LF z6R5bL9wt7j{`ZCNO(~yN<-tF7L%jr4&b(Ns(k5so{@S1tpf-u`dF%-JAZ?yP`4ut@ zzYzdu=a!=n+Q`V<5p31n*ya#X>fE43vqQfQ^lYgd9K3%-#z{(#Bh~{#JH;N+mJr*p zs>8>41<4nqe@xq3aFNi2h3@Dq-UzAL;g3&>LUCns4r594yus7y*ArgCOsPIRnSj5 zf>i!O(T(^|rM}_wrj!d3vW(CMkJ5cE)+CReHYjFbwnFb!m)e;EUr*23rE=OAXXn?M zPnC5fMmW0~=cXl?7~S7!^6OGKy9DFsa%p_-tVK`Ps=GdT%QDB;r_e4*+9Ti+S~u;$ zS>9~X;HT9@&z%so4J@qFOOopH+T29W%jFy1{02}<0|XQR00;;G&1_p!Eagrrz5oCK zJ^=s#69AJx4HbWVkim|^FbqWR{fa2})?E$=p|%_r{(v8_f?EQO6V)y%e@}oL+U01? z%o}-{-4aG~qe*<^*8WtrHN-BSJP)m%wJ$ez*A>n2o=8mgvb6TBnzjJq&J<9pn258| z$0?xZa~dF_yW&8ws_Qkl$V#lGJ{h(vjA{1N<2WZ#qM2TEyC$ZzIo(ZFku?g6t(1CIj( z#cW%X+y+>GZF8YXjiO?EVgCD0l3!$5iY>>f4Xi<6krH`)?ztoHMCz{IOyi-2(U zwsLG$D;j1l_Xz90t$expXx1wA^A~6Pm%m@!{B`|7^C=0WcKzl3)u#)sV%qjQ-=|o+ z;C(-oSlIUE&82pI_34ir4TRbDhtCzQ(v#9Zwe7)wU|^xBx#jYH)G)BG1^2O#qbrbV zLI=x}UIoTWhMB_!cRk|D^A~$(w|I2UP#>S!Q3-AYQUKud-w-*o$K`Rez=Z)m=d=xY zC|qoDHX3I8bO^;aBOeFTK1c`@6{fwj-Rwz=Sb&ctaKZBWk5$-98WQHx(3@hL$v*&w z`k2XoATgt7@4T?BpGmHz=iizF`baP608}t5c66db}14lzVSrC$#pYQS~zf# zkG+=LLn2pV#?%7)JRp*b(bU+}p`&`6a`(11w&rx$463v*&mfIES+R($qfW%*E@6vZ zZRc>YEoR1{XByWzhY-NGM)NEqwxOn8HmdC?3#b!WJ(91(qV2pWl5<01QT#9Gc@N`bb( z=vIwq3sxOOsq6_Jc6%xq5D=qW6yTkO9|HG%|wDM3;1b&H(a&$R(qFjZGqg1yQa!qbK_s8-t@a4w_Ng)Ycn~ zQ$+n9I&HR^M{xxhizC5k$ zrYRt+I1DDTGN;ea9RD2Maa04fafgXeR;o=kY*fvkk=c1?er(=+BF79#aVX-6x ztvNu^XEr(1t$vC$Hz~}n@n>Y`Fa85iO9u!5vK>XG1pol%CIA3XO928u0~7!N2nYbp zY+F-2HiaTK0ssKEljsaLAI)rAQ!M39D!u>!06qZ#022TJ00000000000JMQ>lRgbV z0a=rO4N?IblhO?(AjNE3Qvk9ZMWqD*0OlqD03rYY00000000000HlH529xUsB$GQ1 L5C+o>00000ywiEJ diff --git a/misc/vscode/syntaxes/onyx.tmLanguage b/misc/vscode/syntaxes/onyx.tmLanguage index 2f651c03..1ea8cb72 100644 --- a/misc/vscode/syntaxes/onyx.tmLanguage +++ b/misc/vscode/syntaxes/onyx.tmLanguage @@ -164,7 +164,7 @@ match - \b(use|macro|package)\b + \b(use|macro|package|where)\b name keyword.control.onyx @@ -200,7 +200,7 @@ match - \b(struct|enum)\b + \b(struct|enum|interface)\b name storage.type.onyx @@ -230,7 +230,7 @@ match - \b(struct|enum)\b(?:(\{)(\}))? + \b(struct|enum|interface)\b(?:(\{)(\}))? name storage.type.onyx @@ -315,7 +315,7 @@ match - \b(\b[[:alpha:]_]+[[:alnum:]_]*\b)\s*[:]\s*[:]\s*(struct|enum) + \b(\b[[:alpha:]_]+[[:alnum:]_]*\b)\s*[:]\s*[:]\s*(struct|enum|interface) captures 1 -- 2.25.1