From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from smtp54.i.mail.ru (smtp54.i.mail.ru [217.69.128.34]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dev.tarantool.org (Postfix) with ESMTPS id C7E4E46970E for ; Fri, 10 Jan 2020 17:51:45 +0300 (MSK) Date: Fri, 10 Jan 2020 17:51:44 +0300 From: Sergey Ostanevich Message-ID: <20200110145144.GA16631@tarantool.org> References: <20191111145009.91425-1-olegrok@tarantool.org> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline In-Reply-To: <20191111145009.91425-1-olegrok@tarantool.org> Subject: Re: [Tarantool-patches] [PATCH v2] error: Add __concat method to error object List-Id: Tarantool development patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Oleg Babin Cc: Oleg Babin , tarantool-patches@dev.tarantool.org Hi! Thanks for the patch! LGTM. Sergos On 11 Nov 17:50, Oleg Babin wrote: > From: Oleg Babin > > Usually functions return pair {nil, err} and expected that err is string. > Let's make the behaviour of error object closer to string > and define __concat metamethod. > > Closes #4489 > --- > > Changes in v2: > - Added tests > > --- > src/lua/error.lua | 8 +++++++ > test/box/misc.result | 47 +++++++++++++++++++++++++++++++++++++++++- > test/box/misc.test.lua | 17 ++++++++++++++- > 3 files changed, 70 insertions(+), 2 deletions(-) > > diff --git a/src/lua/error.lua b/src/lua/error.lua > index 28fc0377d..b44fab7b6 100644 > --- a/src/lua/error.lua > +++ b/src/lua/error.lua > @@ -150,9 +150,17 @@ local function error_index(err, key) > return error_methods[key] > end > > +local function error_concat(lhs, rhs) > + if lhs == nil or rhs == nil then > + error("attempt to concatenate struct error and nil") > + end > + return tostring(lhs) .. tostring(rhs) > +end > + > local error_mt = { > __index = error_index; > __tostring = error_message; > + __concat = error_concat; > }; > > ffi.metatype('struct error', error_mt); > diff --git a/test/box/misc.result b/test/box/misc.result > index b2930515b..db184c037 100644 > --- a/test/box/misc.result > +++ b/test/box/misc.result > @@ -196,6 +196,51 @@ box.error.new() > --- > - error: 'Usage: box.error.new(code, args)' > ... > +-- > +-- gh-4489: box.error has __concat metamethod > +-- > +test_run:cmd("push filter '(.builtin/.*.lua):[0-9]+' to '\\1'") > +--- > +- true > +... > +e = box.error.new(box.error.UNKNOWN) > +--- > +... > +'left side: ' .. e > +--- > +- 'left side: Unknown error' > +... > +e .. ': right side' > +--- > +- 'Unknown error: right side' > +... > +e .. nil > +--- > +- error: 'builtin/error.lua: attempt to concatenate struct error and nil' > +... > +nil .. e > +--- > +- error: 'builtin/error.lua: attempt to concatenate struct error and nil' > +... > +e .. box.NULL > +--- > +- error: 'builtin/error.lua: attempt to concatenate struct error and nil' > +... > +box.NULL .. e > +--- > +- error: 'builtin/error.lua: attempt to concatenate struct error and nil' > +... > +123 .. e > +--- > +- 123Unknown error > +... > +e .. 123 > +--- > +- Unknown error123 > +... > +e = nil > +--- > +... > ---------------- > -- # box.stat > ---------------- > @@ -1037,7 +1082,7 @@ error() > --- > - error: null > ... > --- A test case for bitwise operations > +-- A test case for bitwise operations > bit.lshift(1, 32) > --- > - 1 > diff --git a/test/box/misc.test.lua b/test/box/misc.test.lua > index cc223b2ef..6104b935b 100644 > --- a/test/box/misc.test.lua > +++ b/test/box/misc.test.lua > @@ -59,6 +59,21 @@ e = box.error.new(box.error.CREATE_SPACE, "space", "error") > e > box.error.new() > > +-- > +-- gh-4489: box.error has __concat metamethod > +-- > +test_run:cmd("push filter '(.builtin/.*.lua):[0-9]+' to '\\1'") > +e = box.error.new(box.error.UNKNOWN) > +'left side: ' .. e > +e .. ': right side' > +e .. nil > +nil .. e > +e .. box.NULL > +box.NULL .. e > +123 .. e > +e .. 123 > +e = nil > + > ---------------- > -- # box.stat > ---------------- > @@ -271,7 +286,7 @@ dostring('return abc') > dostring('return ...', 1, 2, 3) > -- A test case for Bug#1043804 lua error() -> server crash > error() > --- A test case for bitwise operations > +-- A test case for bitwise operations > bit.lshift(1, 32) > bit.band(1, 3) > bit.bor(1, 2) > -- > 2.23.0 >