From 35273cbca793686fd0c98719529125f0d9a627b8 Mon Sep 17 00:00:00 2001 From: Brendan Hansen Date: Mon, 4 Oct 2021 11:26:57 -0500 Subject: [PATCH] better maps and json; fixed anonymous struct bug --- bin/onyx | Bin 431328 -> 431352 bytes core/container/map.onyx | 111 ++++++++++++++++++++++++----------- core/conv.onyx | 18 ++++-- core/intrinsics/onyx.onyx | 6 ++ core/memory.onyx | 14 +++++ examples/11_map.onyx | 6 +- modules/json/types.onyx | 37 +++++++++++- modules/ui/ui.onyx | 8 +-- src/astnodes.c | 2 +- src/checker.c | 1 + src/parser.c | 3 +- tests/aoc-2020/day14.onyx | 2 +- tests/aoc-2020/day15.onyx | 2 +- tests/aoc-2020/day17.onyx | 2 +- tests/aoc-2020/day20.onyx | 2 +- tests/aoc-2020/day21.onyx | 2 +- tests/aoc-2020/day22.onyx | 2 +- tests/aoc-2020/day24.onyx | 2 +- tests/aoc-2020/day25.onyx | 2 +- tests/persist_locals.onyx | 4 +- tests/struct_robustness.onyx | 8 +-- 21 files changed, 167 insertions(+), 67 deletions(-) diff --git a/bin/onyx b/bin/onyx index 3db06439e05ab835055870dad6dd28f550381b29..f789cd6c28477ea756bc71126690185e61e47aa5 100755 GIT binary patch delta 84153 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 z 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≶wequ3~yoxNhHGwdmOy_e?Cmm9p)sQa(- zC$G3RJpK*8T4btHZ@(P5&EcTr-*B$0kej~271DppBEVNR=v%788Comv{7wuP3AKJD zo?nxEy!qM;5iCDEA@1S5&69toLT@Wu@w2!i*mFs5_8T|`8%#5Jq?g67H@L%Kn32C~ z;;$Ke+2ApQ2MyL5Z1!DnAfLxg+-=$MINmgjbp|&YR0azSwlo=UG4baOx(xqe6Mx6x zX9j1~S{Ywt^g0<#5AdbGK|C|Go8jGHaFM~a2Dch~Kv}jPYHwA}vLCJZo4o~pJL(oR zMYe9F`wY?$AyXSgXfrWHi+Ia}jYX+u9;j=bnfPg@Dz5poYd2{KK8IL z5X7k@`z-!r$TUCH@FN1+4#y|xJK6NhZecB8(wbR0|h*M}zc3ISxm-5ezkgnqyXiu7;ms_!U1`{C0+ar{Nd(rm;D`HxAuv z_}OU|zoWIpajY@?(he5?+Y20ALUU|4f{Y6+!3fh^ju?Kd+})kNnm@qmtM&$Yoe|G6 zeatdOC84IfQijp*63E2iXleL~36>rGRzZEZi3a-cw-#eKcJ-lqVt}u=w;hff9lO}Y z(MNwH$i3e3_j5C*WwYanzW1ESI~Z zT@fRhpEO&lqO$TbgUp_YL1?>f;NO{g1M94CaDxN*AZ_S}WQ2rWwNx ze|(yyFHN#;hF^7?rQh8Q$tz`^Ha7$DZw<`rO|qJAtz`M8mh<52%Bi@GfIdtm6v)Hc z+=C`rcCD4nUL@`?{Lt?${&QAh$3erdF#JQNlku6q9`uz4#JUd@UrnWOTx616KvQXc zmEr3}vp!&hwiS=rMKxJfY2@Usoyz6#n(*>z>c8or(JeMUdk@a=-xCzsFwA1fVA z29KHq6*8u$YeZ08*}R^v=Ylv@b?)Vgh^)HFsyF+TaFkWFZmT*uzL$%+=T^D2m#bI1 z&^s+Puc_s}%pzKiOX;_fvkd&Dm+KA|)$@8|GR346V^^S|W(i-?rnxcso zmhV-DZ?ELthF>U?`nV!m=Vn;G+PyAWj)yIC`?x|PtCB2}rN(5oNt!D+pc9!r)DkZ? zwYA!a>*RjKp2V4!WqZ5tFGd_Y(n@AuAe7lw4S$!(?G3|E9A)WuF?@UMMjOw~H0d~G z^s_B}dBbI{)^XWaTZt7!=x>(4`i?@lmUA_JrXucI?TqkI}EXFW`@i=<90j ziM`!&?k7_*H`zv`EdF5Ac^4Rd;r$l>Sx9X$N@DufNf#Xv~yFMN< z{Nfb>zI<9cQDeG}Jre90tkm%BAz-FFN2TF2nghqH7}YbFW0uwIiN-m5AZDJWUum3( zO%6EG!*N|t%g{kvFyHdp%r1`4ZLj65evE{VOwC$K4o5Tkq;82~xkihN@3sV8OqqKc zah2SS*uz(Z0=e1kI2*C{K5@3?eXMC;dwMA{-ZT3I4tpZVHGI3D*e9Zzv-;1?#(s&# zmy`N)QcE|98AO4@KGRmny#5s7#91YL(AYR8xAk}Fn>~m7GYO~5$q7vKv2sI#D+YN9H$I7e$`m7;04IqbH`SAeP%*foY zt){%exH*f$YMWJZ{N-rj?d5@!!7rD)p5~_7hAUhV&d|5yOINs_!o;kB7%Y{W2BK3X zI}dW*!Dn9O!-L4JP97daIqMEt_8&KO-j}YX?el5z!CYSD%6Ws)%6;A{L8j@5&ls%= zxnXd?*Zo?n!Yq~S6ZCnUc(tuU8FZ!Vj>yzX%g89IQXdP9I9sl{(lyf=dsO~(C5~}V zJuy%Xd5N5YvU4rRE;a3R1?L!T)A6nRYa(aELU}k5Kl!q8655U))=aS4%E8fF*R=C| zhr3$dmgJhjZLfu%+o@&IQYo&9TtCushLiQQvy1!l2t5$BcMz7A+yF`96jKY-4 z&cm6YspR1_T!x%GoVu=(+cad$UtmUt9<@x^&Dcmldy*@YMo@XB9?KKfI)P(MdrO=x zH;lk?oqTZw#fo}FemercQai|YDXtmqO24s;4l}7vnpBD5@_`iEkvdNabmRde108BE z5SjX%mDNioQ57pN?MbTKHj);p@me;!7;z8QVOkt2v_3x=@YmJcg`Ujg1LZ&|G59)T3n&k8!zz7zi82!mf}njzzarMvkMx zD&(wjB#Dx1#?eHfref^r=#41Lexg^tHjd860K6)YXs!n8{3@KvZejJB{-z8EJ6nk| zc?uoZ4&}@dl+rq*c0gM#bqn5c3l`mbW@t{joflhBfmn~`ICc4Hsxj+5dMAyZAY9?6C)XkLP=*3osQKi;^H){)rek4ablGt3f zo8+1inQPKbG3h3Cx8&JnYbN27Gqj8RYdU>{?9-{LC^G=p8ucmBmO4|_WXi=9Fd40? zDV8&9nIrV^n9+)o^R!l#+@Q58?zXf>SW1psqZKRnYpog?G=<_<$;c_X+=u0zQyAfn zLMzcdCehn5mID>04b4`KTxYlT8 za8}n9P6wHRtyuYxhFp1ghCWM_mYtm8@;JF2c;_rvs$6x0t8Llavt0ip%AUBv)iEaM zgxp=|>V2-;oV}PsPZrWO_;CChSMTQObFI@^x?Hrz)xUYsLMvKS_Tn1Xea@Ep;dp)M fOC!G=yUuk9!(`Dq*Okq~3%I7`=putwyDt1+wmo%X delta 84042 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 x8!X Map(Key, Value) { +make :: ($Key: type_expr, $Value: type_expr, default := __zero_value(Value)) -> Map(Key, Value) { map : Map(Key, Value); - init(^map, default = default, hash_count = hash_count); + init(^map, default = default); return map; } -init :: (use map: ^Map($K, $V), default := __zero_value(V), hash_count: i32 = 16) { - array.init(^hashes, hash_count); - array.init(^entries, 4); +init :: (use map: ^Map($K, $V), default := __zero_value(V)) { + __initialize(map); + allocator = context.allocator; default_value = default; - for i: 0 .. hash_count do array.push(^hashes, -1); + memory.alloc_slice(^hashes, 8, allocator=allocator); + memory.fill_slice(hashes, -1); + + array.init(^entries, allocator=allocator); } free :: (use map: ^Map($K, $V)) { - array.free(^hashes); + memory.free_slice(^hashes, allocator=allocator); array.free(^entries); } @@ -46,13 +56,10 @@ put :: (use map: ^Map($K, $V), key: K, value: V) { return; } - array.push(^entries, .{ - key = key, - value = value, - hashes[lr.hash_index], - }); - + entries << .{ hashes[lr.hash_index], key, value }; hashes[lr.hash_index] = entries.count - 1; + + if full(map) do grow(map); } has :: (use map: ^Map($K, $V), key: K) -> bool { @@ -83,7 +90,7 @@ delete :: (use map: ^Map($K, $V), key: K) { if lr.entry_prev < 0 do hashes[lr.hash_index] = entries[lr.entry_index].next; else do entries[lr.entry_prev].next = entries[lr.entry_index].next; - if lr.entry_index == entries.count - 1 { + if lr.entry_index == entries.count - 1{ array.pop(^entries); return; } @@ -118,28 +125,62 @@ empty :: (use map: ^Map($K, $V)) -> bool { // Private symbols // -#private_file -MapLookupResult :: struct { - hash_index : i32 = -1; - entry_index : i32 = -1; - entry_prev : i32 = -1; -} +#private_file { + MapLookupResult :: struct { + hash_index : i32 = -1; + entry_index : i32 = -1; + entry_prev : i32 = -1; + } + + lookup :: (use map: ^Map($K, $V), key: K) -> MapLookupResult { + lr := MapLookupResult.{}; + + hash_value: u32 = hash.to_u32(key); // You cannot use this type for the key, unless you add an overload. -#private_file -lookup :: (use map: ^Map($K, $V), key: K) -> MapLookupResult { - lr := MapLookupResult.{}; + lr.hash_index = hash_value % hashes.count; + lr.entry_index = hashes[lr.hash_index]; - hash_value: u32 = hash.to_u32(key); // You cannot use this type for the key, unless you add an overload. + while lr.entry_index >= 0 { + if entries[lr.entry_index].key == key do return lr; - lr.hash_index = hash_value % hashes.count; - lr.entry_index = hashes[lr.hash_index]; + lr.entry_prev = lr.entry_index; + lr.entry_index = entries[lr.entry_index].next; + } - while lr.entry_index >= 0 { - if entries[lr.entry_index].key == key do return lr; + return lr; + } + + add_entry :: (use map: ^Map($K, $V), key: K) -> i32 { + entry: Map.Entry(K, V); + entry.key = key; + entry.next = -1; + + entries << entry; + + return entries.count - 1; + } - lr.entry_prev = lr.entry_index; - lr.entry_index = entries[lr.entry_index].next; + full :: (use map: ^Map($K, $V)) => entries.count >= ~~(0.75f * ~~hashes.count); + + grow :: (use map: ^Map($K, $V)) { + new_size := math.max(hashes.count << 1, 8); + rehash(map, new_size); } - return lr; + rehash :: (use map: ^Map($K, $V), new_size: i32) { + memory.free_slice(^hashes, allocator); + memory.alloc_slice(^hashes, new_size, allocator); + memory.fill_slice(hashes, -1); + + for ^entry: entries do entry.next = -1; + + index := 0; + for ^entry: entries { + defer index += 1; + + lr := lookup(map, entry.key); + entries[index].next = hashes[lr.hash_index]; + hashes[lr.hash_index] = index; + } + } } diff --git a/core/conv.onyx b/core/conv.onyx index d648f2a8..76eaf087 100644 --- a/core/conv.onyx +++ b/core/conv.onyx @@ -477,8 +477,12 @@ str_format_va :: (buffer: [] u8, format: str, va: [] any) -> str { if info.kind == .Struct { s := cast(^Type_Info_Struct) info; - if s.name.count > 0 do output->write(s.name); - output->write(" { "); + if s.name.count > 0 { + output->write(s.name); + output->write(" { "); + } else { + output->write("{ "); + } { format := formatting; @@ -534,7 +538,11 @@ str_format_va :: (buffer: [] u8, format: str, va: [] any) -> str { // This assumes that the following type_info kinds are basically the same. if info.kind == .Dynamic_Array || info.kind == .Slice || info.kind == .Variadic_Argument { - output->write("[ "); + if formatting.pretty_printing { + output->write("["); + } else { + output->write("[ "); + } a := cast(^Type_Info_Dynamic_Array) info; arr := cast(^array.Untyped_Array) v.data; @@ -543,7 +551,7 @@ str_format_va :: (buffer: [] u8, format: str, va: [] any) -> str { format := formatting; format.quote_strings = true; - if format.pretty_printing do format.indentation += 2; + if format.pretty_printing do format.indentation += 4; for i: count { if i != 0 do output->write(", "); @@ -558,7 +566,7 @@ str_format_va :: (buffer: [] u8, format: str, va: [] any) -> str { if formatting.pretty_printing { - format.indentation -= 2; + format.indentation -= 4; output->write("\n"); for _: format.indentation do output->write(#char " "); output->write(#char "]"); diff --git a/core/intrinsics/onyx.onyx b/core/intrinsics/onyx.onyx index 6df73adf..cf752a90 100644 --- a/core/intrinsics/onyx.onyx +++ b/core/intrinsics/onyx.onyx @@ -2,3 +2,9 @@ package core.intrinsics.onyx __initialize :: (val: ^$T) -> void #intrinsic --- __zero_value :: ($T: type_expr) -> T #intrinsic --- + +init :: macro ($T: type_expr) -> T { + val: T; + __initialize(^val); + return val; +} diff --git a/core/memory.onyx b/core/memory.onyx index 17a99ea9..7fcbc969 100644 --- a/core/memory.onyx +++ b/core/memory.onyx @@ -59,6 +59,20 @@ copy_slice :: (sl: [] $T, allocator := context.allocator) -> [] T { return .{ data = data, count = sl.count }; } +resize_slice :: (sl: [] $T, new_size: i32, allocator := context.allocator) -> [] T { + new_slice: [] T; + new_slice.data = raw_alloc(allocator, sizeof T * new_size); + new_slice.count = new_size; + + copy(new_slice.data, sl.data, sl.count * sizeof T); + + return new_slice; +} + +fill_slice :: macro (sl: [] $T, v: T) { + for ^it: sl do *it = v; +} + align :: #match { (size: ^u64, align: u64) { if *size % align != 0 { diff --git a/examples/11_map.onyx b/examples/11_map.onyx index 5cab4dac..80b25e69 100644 --- a/examples/11_map.onyx +++ b/examples/11_map.onyx @@ -9,7 +9,7 @@ main :: (args: [] cstr) { // To use it, simply create one like so: ages : Map(str, u32); - map.init(^ages, default=0, hash_count=16); + map.init(^ages, default=0); defer map.free(^ages); // Alternatively you can use the map.make function to achieve the @@ -19,9 +19,7 @@ main :: (args: [] cstr) { // The defer statement ensures that the map memory will be freed // when this procedure exits, no matter through which way. The // 'default' argument is used to specify what value should be - // returned when the map does not contain the requested key. The - // hash_count is an implementation detail that will go away in the - // near future. It is the maximum number of chains in the hash table. + // returned when the map does not contain the requested key. // To put an entry into the map, use the map.put procedure. map.put(^ages, "Dwight", 32); diff --git a/modules/json/types.onyx b/modules/json/types.onyx index 74546d82..2f6567ef 100644 --- a/modules/json/types.onyx +++ b/modules/json/types.onyx @@ -93,6 +93,9 @@ Value_Float :: struct { Value_String :: struct { use base := Value.{ type = .String }; str_: str; + + // Set if the string should not be freed from the allocator. + static := false; } Value_Array :: struct { @@ -104,6 +107,8 @@ Value_Object :: struct { use base := Value.{ type = .Object }; object_: [..] struct { key : str; + key_is_static := false; + value : ^Value; }; } @@ -133,11 +138,35 @@ get_idx :: (v: ^Value, idx: i32) -> ^Value { return v_arr.array_[idx]; } +set :: #match { + macro (v: ^Value, key: str, value: ^Value, key_is_static := false) { + if v.type == .Object { + Value_Object_ :: Value_Object ; + + (cast(^Value_Object_) v).object_ << .{ key, key_is_static, value }; + } + }, + + // Quick thing for allocating json values on the stack. + macro (v: ^Value, key: str, value: str, key_is_static := false, value_is_static := false) { + Value_String_ :: Value_String ; + Value_Object_ :: Value_Object ; + + if v.type == .Object { + json_value := init(Value_String_); + json_value.str_ = value; + json_value.static = value_is_static; + + (cast(^Value_Object_) v).object_ << .{ key, key_is_static, ^json_value }; + } + } +} + free :: #match { (v: ^Value, allocator: Allocator) do switch v.type { case .String { v_str := cast(^Value_String) v; - raw_free(allocator, v_str.str_.data); + if !v_str.static do raw_free(allocator, v_str.str_.data); } case .Array { @@ -151,7 +180,7 @@ free :: #match { case .Object { v_obj := cast(^Value_Object) v; for ^entry: v_obj.object_ { - raw_free(allocator, entry.key.data); + if !entry.key_is_static do raw_free(allocator, entry.key.data); free(entry.value, allocator); } array.free(^v_obj.object_); @@ -162,3 +191,7 @@ free :: #match { free(root, allocator); }, } + +static_string :: (s: str) -> Value_String { + return .{ str_ = s, static = true }; +} diff --git a/modules/ui/ui.onyx b/modules/ui/ui.onyx index 5cfe8f7f..d9153969 100644 --- a/modules/ui/ui.onyx +++ b/modules/ui/ui.onyx @@ -16,11 +16,11 @@ UI_Id :: #type u32 } init_ui :: () { - map.init(^font_registry, hash_count=4); + map.init(^font_registry); - map.init(^animation_states, default=.{}, hash_count=4); - map.init(^workspace_states, default=.{}, hash_count=4); - map.init(^scrollable_region_states, default=.{}, hash_count=4); + map.init(^animation_states, default=.{}); + map.init(^workspace_states, default=.{}); + map.init(^scrollable_region_states, default=.{}); // Register a default font so things don't break everywhere builtin_font := create_font(#file_contents "./fonts/builtin.fnt", #file_contents "./fonts/builtin.data"); diff --git a/src/astnodes.c b/src/astnodes.c index 972b9a8c..3ab5bac2 100644 --- a/src/astnodes.c +++ b/src/astnodes.c @@ -567,7 +567,7 @@ b32 unify_node_and_type_(AstTyped** pnode, Type* type, b32 permanent) { if (func == NULL) return 0; // FIXME: This is incorrect. It should actually yield and not return a failure. - if (func == &node_that_signals_a_yield) return 0; + if (func == (AstFunction *) &node_that_signals_a_yield) return 0; *pnode = (AstTyped *) func; node = *pnode; diff --git a/src/checker.c b/src/checker.c index 2681a434..fd282119 100644 --- a/src/checker.c +++ b/src/checker.c @@ -1138,6 +1138,7 @@ CheckStatus check_array_literal(AstArrayLiteral* al) { } al->flags |= Ast_Flag_Comptime; + assert(al->type->kind == Type_Kind_Array); Type* elem_type = al->type->Array.elem; bh_arr_each(AstTyped *, expr, al->values) { diff --git a/src/parser.c b/src/parser.c index 71cac81e..cc4891ed 100644 --- a/src/parser.c +++ b/src/parser.c @@ -1964,6 +1964,7 @@ static AstStructType* parse_struct(OnyxParser* parser) { return (AstStructType *) poly_struct; } else { + ENTITY_SUBMIT(s_node); return s_node; } } @@ -2597,7 +2598,7 @@ static AstBinding* parse_top_level_binding(OnyxParser* parser, OnyxToken* symbol } // HACK: This should maybe be entered elsewhere? - ENTITY_SUBMIT(node); + if (node->kind != Ast_Kind_Struct_Type) ENTITY_SUBMIT(node); } AstBinding* binding = make_node(AstBinding, Ast_Kind_Binding); diff --git a/tests/aoc-2020/day14.onyx b/tests/aoc-2020/day14.onyx index 78a16dc7..97c8397c 100644 --- a/tests/aoc-2020/day14.onyx +++ b/tests/aoc-2020/day14.onyx @@ -78,7 +78,7 @@ main :: (args: [] cstr) { file := reader.make(contents); - mem := map.make(u64, u64, default=0, hash_count=257); + mem := map.make(u64, u64, default=0); defer map.free(^mem); mask : Bitmask; diff --git a/tests/aoc-2020/day15.onyx b/tests/aoc-2020/day15.onyx index c5417d9b..50d2aa61 100644 --- a/tests/aoc-2020/day15.onyx +++ b/tests/aoc-2020/day15.onyx @@ -14,7 +14,7 @@ main :: (args: [] cstr) { // The current implementation of Map is rather slow at a large scale. // Any changes to the implementation of Map should be tested on this // file to validate if they 1) work and 2) are faster. - nums := map.make(u32, spoken_times, .{}, 32767); + nums := map.make(u32, spoken_times, .{}); defer map.free(^nums); turn := 1; diff --git a/tests/aoc-2020/day17.onyx b/tests/aoc-2020/day17.onyx index 19c29ab9..fa793c63 100644 --- a/tests/aoc-2020/day17.onyx +++ b/tests/aoc-2020/day17.onyx @@ -41,7 +41,7 @@ main :: (args: [] cstr) { file := reader.make(contents); - cubes := map.make(CubePos, CubeState, .{}, 2047); + cubes := map.make(CubePos, CubeState, .{}); defer map.free(^cubes); z := 0; diff --git a/tests/aoc-2020/day20.onyx b/tests/aoc-2020/day20.onyx index c616f275..917a28ad 100644 --- a/tests/aoc-2020/day20.onyx +++ b/tests/aoc-2020/day20.onyx @@ -246,7 +246,7 @@ main :: (args: [] cstr) { tiles := array.make(Tile); defer array.free(^tiles); - tile_map := map.make(u32, #type ^Tile, null, 67); + tile_map := map.make(u32, #type ^Tile, null); defer map.free(^tile_map); tile_data := calloc(200 * sizeof TileData); diff --git a/tests/aoc-2020/day21.onyx b/tests/aoc-2020/day21.onyx index a2326d1a..c1dc72a5 100644 --- a/tests/aoc-2020/day21.onyx +++ b/tests/aoc-2020/day21.onyx @@ -36,7 +36,7 @@ main :: (args: [] cstr) { file := reader.make(contents); - map.init(^ingredient_map, .{}, 127); + map.init(^ingredient_map, .{}); map.init(^allergen_map, .{}); defer { map.free(^ingredient_map); diff --git a/tests/aoc-2020/day22.onyx b/tests/aoc-2020/day22.onyx index 616d62f4..7e4d9d63 100644 --- a/tests/aoc-2020/day22.onyx +++ b/tests/aoc-2020/day22.onyx @@ -60,7 +60,7 @@ encode_hands :: (alloc: Allocator, p1: ^[..] u32, p2: ^[..] u32) -> str { } recursive_combat :: (player1: ^[..] u32, player2: ^[..] u32) -> u32 { - hand_seen := map.make(str, bool, false, 31); + hand_seen := map.make(str, bool, false); defer map.free(^hand_seen); while player1.count > 0 && player2.count > 0 { diff --git a/tests/aoc-2020/day24.onyx b/tests/aoc-2020/day24.onyx index 79a53514..efef79d6 100644 --- a/tests/aoc-2020/day24.onyx +++ b/tests/aoc-2020/day24.onyx @@ -31,7 +31,7 @@ main :: (args: [] cstr) { file_stream := io.string_stream_make(contents); file := io.reader_make(^file_stream); - grid := map.make(Vec2, Cell, .{}, 1021); // `true` is black + grid := map.make(Vec2, Cell, .{}); // `true` is black defer map.free(^grid); while !io.stream_end_of_file(^file_stream) { diff --git a/tests/aoc-2020/day25.onyx b/tests/aoc-2020/day25.onyx index 443a1cb8..5d47bfae 100644 --- a/tests/aoc-2020/day25.onyx +++ b/tests/aoc-2020/day25.onyx @@ -22,7 +22,7 @@ power_mod :: (base: u32, exp: u32, mod: u32) -> u32 { dlp_bsgs :: (n: u32, a: u32, b: u32) -> u32 { m := cast(u32) math.ceil(math.sqrt(cast(f64) n)); - t := map.make(u32, u32, default=0, hash_count=m/2); + t := map.make(u32, u32, default=0); defer map.free(^t); tmp: u64 = 1; diff --git a/tests/persist_locals.onyx b/tests/persist_locals.onyx index 81f319f0..d3e9c407 100644 --- a/tests/persist_locals.onyx +++ b/tests/persist_locals.onyx @@ -29,7 +29,7 @@ foo :: (x: i32) -> i32 { cached_fib :: (n: u64) -> u64 { #persist cache : map.Map(u64, u64); if cache.hashes.data == null { - map.init(^cache, hash_count=128); + map.init(^cache); } if n <= 1 do return n; @@ -54,4 +54,4 @@ cached_fib :: (n: u64) -> u64 { printf("{} ", cache.entries.count); } -} \ No newline at end of file +} diff --git a/tests/struct_robustness.onyx b/tests/struct_robustness.onyx index 55d5f974..09648d30 100644 --- a/tests/struct_robustness.onyx +++ b/tests/struct_robustness.onyx @@ -140,11 +140,9 @@ main :: (args: [] cstr) { test_polymorphic_union_with_use :: () { println("\n\nTesting a polymorphic union with use."); - PolyStruct :: struct (T: type_expr, R: type_expr) { - use container : struct #union { - t_data : T; - r_data : R; - }; + PolyStruct :: struct (T: type_expr, R: type_expr) #union { + t_data : T; + r_data : R; } printf("{} == 16\n", sizeof PolyStruct(i32, [] u32)); -- 2.25.1