Gentoo Archives: gentoo-commits

From: "Petteri Räty" <betelgeuse@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] proj/libbash:master commit in: bashast/, test/
Date: Thu, 31 Mar 2011 12:32:40
Message-Id: 165e60662fcc7cd2c81ad1cb39ce9a9f2005cc50.betelgeuse@gentoo
1 commit: 165e60662fcc7cd2c81ad1cb39ce9a9f2005cc50
2 Author: Mu Qiao <qiaomuf <AT> gentoo <DOT> org>
3 AuthorDate: Thu Mar 31 03:16:21 2011 +0000
4 Commit: Petteri Räty <betelgeuse <AT> gentoo <DOT> org>
5 CommitDate: Thu Mar 31 08:35:49 2011 +0000
6 URL: http://git.overlays.gentoo.org/gitweb/?p=proj/libbash.git;a=commit;h=165e6066
7
8 Implement simple variable definition
9
10 Allow to define a string with a simple value.
11
12 ---
13 bashast/libbashWalker.g | 11 +++++++++++
14 test/walker_test.cpp | 31 +++++++++++++++++++++++++++++++
15 2 files changed, 42 insertions(+), 0 deletions(-)
16
17 diff --git a/bashast/libbashWalker.g b/bashast/libbashWalker.g
18 index 9231d63..19cb511 100644
19 --- a/bashast/libbashWalker.g
20 +++ b/bashast/libbashWalker.g
21 @@ -45,6 +45,17 @@ name returns[std::string libbash_value]:
22 | LETTER {$libbash_value = walker->get_string($LETTER);}
23 | '_' {$libbash_value="_";};
24
25 +var_def:
26 + ^(EQUALS libbash_name=name libbash_value=string_expr){
27 + walker->define(libbash_name, libbash_value);
28 + };
29 +
30 +string_expr returns[std::string libbash_value]:
31 + ^(STRING libbash_string=string_expr) { $libbash_value = libbash_string; }
32 + |^(DOUBLE_QUOTED_STRING (libbash_tmp=name { libbash_string += libbash_tmp; })+) {
33 + $libbash_value = libbash_string;
34 + };
35 +
36 // shell arithmetic
37 arithmetics returns[int value]
38 :
39
40 diff --git a/test/walker_test.cpp b/test/walker_test.cpp
41 index c026605..251e0aa 100644
42 --- a/test/walker_test.cpp
43 +++ b/test/walker_test.cpp
44 @@ -131,6 +131,30 @@ protected:
45 }
46 };
47
48 +class string_assignment_walker: public walker_test
49 +{
50 + libbashParser_var_def_return langAST;
51 +protected:
52 + void init_walker(const char* script)
53 + {
54 + init_parser(script);
55 + langAST = psr->var_def(psr);
56 + nodes = antlr3CommonTreeNodeStreamNewTree(langAST.tree,
57 + ANTLR3_SIZE_HINT);
58 + treePsr = libbashWalkerNew(nodes);
59 + set_interpreter(walker);
60 + }
61 +
62 + void check_string_assignment(const char* script,
63 + const string& name,
64 + const char* exp_value)
65 + {
66 + init_walker(script);
67 + treePsr->var_def(treePsr);
68 + EXPECT_STREQ(exp_value, walker->resolve<string>(name).c_str());
69 + }
70 +};
71 +
72 #define TEST_BINARY_ARITHMETIC(name, script, exp_value)\
73 TEST_F(arithmetic_walker, name)\
74 {EXPECT_EQ(exp_value, run_arithmetic(script));}
75 @@ -189,3 +213,10 @@ TEST_ARITHMETIC_ASSIGNMENT(right_shift_assignment, "value>>=2", "value",
76 TEST_ARITHMETIC_ASSIGNMENT(and_assignment, "value&=10", "value", 0)
77 TEST_ARITHMETIC_ASSIGNMENT(xor_assignment, "value^=5", "value", 97)
78 TEST_ARITHMETIC_ASSIGNMENT(or_assignment, "value|=10", "value", 110)
79 +
80 +#define TEST_STRING_ASSIGNMENT(name, script, var_name, exp_value)\
81 + TEST_F(string_assignment_walker, name) \
82 + { check_string_assignment(script, var_name, exp_value); }
83 +
84 +TEST_STRING_ASSIGNMENT(str_assignment, "str=\"abc\"", "str", "abc")
85 +TEST_STRING_ASSIGNMENT(str_assignment2, "str=\"abc_def\"", "str", "abc_def")