From c37bb48e9c986340a19ce1a58c38587cbc1d4cdb Mon Sep 17 00:00:00 2001 From: playX Date: Tue, 26 Apr 2022 18:00:44 +0000 Subject: [PATCH] checker: allow + - * on pointers for translated code (#14183) --- vlib/v/checker/checker.v | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/vlib/v/checker/checker.v b/vlib/v/checker/checker.v index b8a3a98444..fc4b62fab1 100644 --- a/vlib/v/checker/checker.v +++ b/vlib/v/checker/checker.v @@ -702,8 +702,13 @@ pub fn (mut c Checker) infix_expr(mut node ast.InfixExpr) ast.Type { && c.table.sym((left_sym.info as ast.Alias).parent_type).is_primitive() { left_sym = c.table.sym((left_sym.info as ast.Alias).parent_type) } + if c.pref.translated && node.op in [.plus, .minus, .mul] + && left_type.is_any_kind_of_pointer() + && (right_type.is_any_kind_of_pointer() || right_type.is_int()) { + return_type = left_type + } // Check if the alias type is not a primitive then allow using operator overloading for aliased `arrays` and `maps` - if !c.pref.translated && left_sym.kind == .alias && left_sym.info is ast.Alias + else if !c.pref.translated && left_sym.kind == .alias && left_sym.info is ast.Alias && !(c.table.sym((left_sym.info as ast.Alias).parent_type).is_primitive()) { if left_sym.has_method(node.op.str()) { if method := left_sym.find_method(node.op.str()) {