From 19390871e9b8abcf505df1a6045f11d890a48de5 Mon Sep 17 00:00:00 2001 From: wilesun Date: Thu, 7 May 2020 10:33:19 +0800 Subject: [PATCH] json: handle external types --- vlib/v/gen/cgen.v | 6 +++--- vlib/v/gen/json.v | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/vlib/v/gen/cgen.v b/vlib/v/gen/cgen.v index bccd4ecbfe..61e2c7acf5 100644 --- a/vlib/v/gen/cgen.v +++ b/vlib/v/gen/cgen.v @@ -1548,11 +1548,11 @@ fn (mut g Gen) infix_expr(node ast.InfixExpr) { g.expr(node.left) g.write(', &($elem_type_str[]){ ') elem_sym := g.table.get_type_symbol(info.elem_type) - if elem_sym.kind == .interface_ { + if elem_sym.kind == .interface_ && node.right_type != info.elem_type{ g.interface_call(node.right_type, info.elem_type) } g.expr_with_cast(node.right, node.right_type, info.elem_type) - if elem_sym.kind == .interface_ { + if elem_sym.kind == .interface_ && node.right_type != info.elem_type{ g.write(')') } g.write(' })') @@ -3535,7 +3535,7 @@ fn (g &Gen) interface_table() string { cast_functions.writeln(' _Interface I_${cctype}_to_Interface_${interface_name}(${cctype}* x) { return (_Interface) { - ._object = (void*) memdup(x, sizeof(${cctype})), + ._object = (void*) (x), ._interface_idx = ${interface_index_name} }; }') diff --git a/vlib/v/gen/json.v b/vlib/v/gen/json.v index 13db15c1c0..a2a2df38d1 100644 --- a/vlib/v/gen/json.v +++ b/vlib/v/gen/json.v @@ -103,12 +103,12 @@ cJSON* ${enc_fn_name}($styp val) { fn js_enc_name(typ string) string { name := 'json__encode_$typ' - return name + return name.replace('.', '__') } fn js_dec_name(typ string) string { name := 'json__decode_$typ' - return name + return name.replace('.', '__') } fn is_js_prim(typ string) bool {