@@ -3,23 +3,29 @@ const Allocator = std.mem.Allocator;
33const Keywords = @import ("token.zig" ).Keywords ;
44
55// Doplnění v REPL (jen v linuxu)
6- pub fn completion (text : ? [ * : 0 ]const u8 , start : c_int , end : c_int ) callconv (.C ) ? [ * : null ] ? [ * : 0 ]u8 {
6+ pub fn completion (text_in : [ * c ]const u8 , start : c_int , end : c_int ) callconv (.c ) [ * c ][ * c ]u8 {
77 _ = end ;
88 _ = start ;
99
10- const alloc = std .heap .raw_c_allocator ;
11- const arr = Keywords .kvs ;
12- var result = std .ArrayList (? [* :0 ]u8 ).init (alloc );
10+ const alloc = std .heap .c_allocator ;
11+ const arr = Keywords .keys ();
12+ const buf = std .mem .span (text_in );
13+ var result = std .ArrayList ([* c ]u8 ){};
1314
14- const buf = std .mem .span (text ) orelse @panic ("Něco se nepodařilo, prosím zkuste znova" );
15-
16- for (arr ) | kv | {
17- if (std .mem .startsWith (u8 , kv .key , buf )) {
18- const duped = alloc .dupeZ (u8 , kv .key ) catch @panic ("Něco se nepodařilo, prosím zkuste znova" );
19- result .append (duped .ptr ) catch @panic ("Něco se nepodařilo, prosím zkuste znova" );
15+ for (arr ) | key | {
16+ if (std .mem .startsWith (u8 , key , buf )) {
17+ const duped = alloc .dupeZ (u8 , key ) catch @panic ("Něco se nepodařilo, prosím zkuste znova" );
18+ result .append (alloc , duped .ptr ) catch @panic ("Něco se nepodařilo, prosím zkuste znova" );
2019 }
2120 }
2221
23- const ownedSlice = result .toOwnedSliceSentinel (null ) catch @panic ("Něco se nepodařilo, prosím zkuste znova" );
24- return if (ownedSlice .len != 0 ) ownedSlice .ptr else null ;
22+ result .append (alloc , null ) catch @panic ("Něco se nepodařilo, prosím zkuste znova" );
23+
24+ const ownedSlice = result .toOwnedSlice (alloc ) catch @panic ("Něco se nepodařilo, prosím zkuste znova" );
25+
26+ if (ownedSlice .len > 1 ) {
27+ return @ptrCast (ownedSlice .ptr );
28+ } else {
29+ return null ;
30+ }
2531}
0 commit comments