diff --git a/compiler/main.v b/compiler/main.v index 8691888e7e..e4159b2611 100644 --- a/compiler/main.v +++ b/compiler/main.v @@ -193,6 +193,7 @@ fn (v mut V) compile() { #include #include // for va_list #include // int64_t etc +#include // memcpy #define STRUCT_DEFAULT_VALUE {} #define EMPTY_STRUCT_DECLARATION diff --git a/compiler/parser.v b/compiler/parser.v index 751837cc60..b902c4db44 100644 --- a/compiler/parser.v +++ b/compiler/parser.v @@ -2309,19 +2309,17 @@ fn format_str(str string) string { } fn (p mut Parser) string_expr() { - // println('.str EXPR') str := p.lit // No ${}, just return a simple string if p.peek() != .dollar { p.fgen('\'$str\'') - // println('before format: "$str"') f := format_str(str) - // println('after format: "$str"') + // `C.puts('hi')` => `puts("hi");` if p.calling_c || (p.pref.translated && p.mod == 'main') { p.gen('"$f"') } else { - p.gen('tos2("$f")') + p.gen('tos2((byte*)"$f")') } p.next() return @@ -2387,8 +2385,8 @@ fn (p mut Parser) string_expr() { } } if complex_inter { - p.fgen('}') -} + p.fgen('}') + } p.fgen('\'') // println("hello %d", num) optimization. if p.cgen.nogen { diff --git a/vlib/builtin/map.v b/vlib/builtin/map.v index 7b3bd46aa1..c34b9d2bb9 100644 --- a/vlib/builtin/map.v +++ b/vlib/builtin/map.v @@ -143,11 +143,10 @@ fn (m map) bs(query string, start, end int, out voidptr) { */ fn (m mut map) preorder_keys(node &Node) { - if node.is_empty { - return - } + if !node.is_empty { m._keys[m.key_i] = node.key m.key_i++ + } if !isnil(node.left) { m.preorder_keys(node.left) } diff --git a/vlib/builtin/map_test.v b/vlib/builtin/map_test.v index 8802d1d99a..508c0b71a6 100644 --- a/vlib/builtin/map_test.v +++ b/vlib/builtin/map_test.v @@ -38,8 +38,10 @@ fn test_map() { assert keys[1] == 'hello' m.delete('hi') assert m.size == 1 + assert m['hi'] == 0 assert m.keys().len == 1 + assert m.keys()[0] == 'hello' //// mut users := map[string]User{} users['1'] = User{'Peter'}