From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from pigeon.gentoo.org ([208.92.234.80] helo=lists.gentoo.org) by finch.gentoo.org with esmtp (Exim 4.60) (envelope-from ) id 1Q4up8-0007IS-DL for garchives@archives.gentoo.org; Wed, 30 Mar 2011 12:48:34 +0000 Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id 861181C08D; Wed, 30 Mar 2011 12:48:07 +0000 (UTC) Received: from smtp.gentoo.org (smtp.gentoo.org [140.211.166.183]) by pigeon.gentoo.org (Postfix) with ESMTP id 4014C1C08D for ; Wed, 30 Mar 2011 12:48:07 +0000 (UTC) Received: from pelican.gentoo.org (unknown [66.219.59.40]) (using TLSv1 with cipher ADH-CAMELLIA256-SHA (256/256 bits)) (No client certificate requested) by smtp.gentoo.org (Postfix) with ESMTPS id A83221B41E0 for ; Wed, 30 Mar 2011 12:48:06 +0000 (UTC) Received: from localhost.localdomain (localhost [127.0.0.1]) by pelican.gentoo.org (Postfix) with ESMTP id 100728006D for ; Wed, 30 Mar 2011 12:48:06 +0000 (UTC) From: "Petteri Räty" To: gentoo-commits@lists.gentoo.org Content-type: text/plain; charset=UTF-8 Reply-To: gentoo-dev@lists.gentoo.org, "Petteri Räty" Message-ID: Subject: [gentoo-commits] proj/libbash:master commit in: src/core/, src/core/tests/ X-VCS-Repository: proj/libbash X-VCS-Files: src/core/interpreter.h src/core/tests/interpreter_test.cpp X-VCS-Directories: src/core/ src/core/tests/ X-VCS-Committer: betelgeuse X-VCS-Committer-Name: Petteri Räty X-VCS-Revision: f6170deb407d04d2e5f823ec1e15e9777754b488 Date: Wed, 30 Mar 2011 12:48:06 +0000 (UTC) Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-Id: Gentoo Linux mail X-BeenThere: gentoo-commits@lists.gentoo.org Content-Transfer-Encoding: quoted-printable X-Archives-Salt: X-Archives-Hash: 3413f3370afc6b186162568d6bc92fbe commit: f6170deb407d04d2e5f823ec1e15e9777754b488 Author: Mu Qiao gentoo org> AuthorDate: Mon Mar 28 13:03:29 2011 +0000 Commit: Petteri R=C3=A4ty gentoo org> CommitDate: Tue Mar 29 04:34:47 2011 +0000 URL: http://git.overlays.gentoo.org/gitweb/?p=3Dproj/libbash.git;a= =3Dcommit;h=3Df6170deb Change the logic when setting a variable value When setting a variable's value, will define it if it doesn't exist, and then return the default value. Otherwise return the original value. --- src/core/interpreter.h | 18 ++++++++++++++---- src/core/tests/interpreter_test.cpp | 14 +++++++------- 2 files changed, 21 insertions(+), 11 deletions(-) diff --git a/src/core/interpreter.h b/src/core/interpreter.h index b494b6a..0833e02 100644 --- a/src/core/interpreter.h +++ b/src/core/interpreter.h @@ -303,16 +303,26 @@ public: } =20 /// \brief update the variable value, raise interpreter_exception if - /// it's readonly, do thing if the variable doesn't exist + /// it's readonly, will define the variable if it doesn't exist /// \param variable name /// \param new value + /// \return the original value of the variable, will call default + /// constructor if the variable doesn't exist template - void set_value(const std::string& name, const T& new_value) + T set_value(const std::string& name, const T& new_value) { std::shared_ptr value =3D members.resolve(name); + T old_value{}; if(!value) - return; - std::static_pointer_cast(value)->set_value(new_value); + { + define(name, new_value, false); + } + else + { + old_value =3D std::static_pointer_cast(value)->get_value= (); + std::static_pointer_cast(value)->set_value(new_value); + } + return old_value; } =20 /// \brief define a new variable diff --git a/src/core/tests/interpreter_test.cpp b/src/core/tests/interpr= eter_test.cpp index 0dbeedc..b183b0b 100644 --- a/src/core/tests/interpreter_test.cpp +++ b/src/core/tests/interpreter_test.cpp @@ -48,10 +48,10 @@ TEST(interpreter, set_int_value) { interpreter walker; walker.define("aint", 4); - walker.set_value("aint", 10); + EXPECT_EQ(4, walker.set_value("aint", 10)); EXPECT_EQ(10, walker.resolve("aint")); - walker.set_value("undefined", 10); - EXPECT_EQ(0, walker.resolve("undefined")); + EXPECT_EQ(0, walker.set_value("undefined", 10)); + EXPECT_EQ(10, walker.resolve("undefined")); =20 walker.define("aint_ro", 4, true); EXPECT_THROW(walker.set_value("aint_ro", 10), @@ -63,13 +63,13 @@ TEST(interpreter, set_string_value) { interpreter walker; walker.define("astring", "hi"); - walker.set_value("astring", "hello"); + EXPECT_STREQ("hi", walker.set_value("astring", "hello").c_str(= )); EXPECT_STREQ("hello", walker.resolve("astring").c_str()); - walker.set_value("undefined", "hello"); - EXPECT_STREQ("", walker.resolve("undefined").c_str()); + EXPECT_STREQ("", walker.set_value("undefined", "hello").c_str(= )); + EXPECT_STREQ("hello", walker.resolve("undefined").c_str()); =20 walker.define("astring_ro", "hi", true); - EXPECT_THROW(walker.set_value("astring_ro", "hello"), + EXPECT_THROW(walker.set_value("astring_ro", "hello"), interpreter_exception); EXPECT_STREQ("hi", walker.resolve("astring_ro").c_str()); }