diff --git a/vlib/json/tests/json_test.v b/vlib/json/tests/json_test.v index 90fbddb28c..5449bd3639 100644 --- a/vlib/json/tests/json_test.v +++ b/vlib/json/tests/json_test.v @@ -461,6 +461,13 @@ fn test_omit_empty() { // println(json.encode_pretty(foo)) } +fn test_encode_struct_expression() { + assert json.encode(Foo2{'Foo'}) == '{"name":"Foo"}' + assert json.encode_pretty(Foo2{'Bar'}) == '{ + "name": "Bar" +}' +} + struct Asdasd { data GamePacketData } diff --git a/vlib/v/checker/fn.v b/vlib/v/checker/fn.v index 0614dbe876..9819de59a9 100644 --- a/vlib/v/checker/fn.v +++ b/vlib/v/checker/fn.v @@ -1563,8 +1563,8 @@ fn (mut c Checker) fn_call(mut node ast.CallExpr, mut continue_check &bool) ast. || final_param_sym.idx == ast.voidptr_type_idx || param.typ == ast.nil_type || final_param_sym.idx == ast.nil_type_idx) && !call_arg.typ.is_any_kind_of_pointer() && func.language == .v - && !call_arg.expr.is_lvalue() && func.name != 'json.encode' && !c.pref.translated - && !c.file.is_translated { + && !call_arg.expr.is_lvalue() && !c.pref.translated && !c.file.is_translated + && func.name !in ['json.encode', 'json.encode_pretty'] { c.error('expression cannot be passed as `voidptr`', call_arg.expr.pos()) } // Handle expected interface