1 |
commit: f026db51e71d8fc76c6fc0ecc78fc9d8113c03a9 |
2 |
Author: Mu Qiao <qiaomuf <AT> gentoo <DOT> org> |
3 |
AuthorDate: Thu Mar 1 07:21:05 2012 +0000 |
4 |
Commit: Petteri Räty <betelgeuse <AT> gentoo <DOT> org> |
5 |
CommitDate: Thu Mar 1 07:21:05 2012 +0000 |
6 |
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/libbash.git;a=commit;h=f026db51 |
7 |
|
8 |
Parser: allow multiple operands in test expression |
9 |
|
10 |
--- |
11 |
bashast/bashast.g | 8 ++++---- |
12 |
bashast/gunit/cond_main.gunit | 4 ++++ |
13 |
2 files changed, 8 insertions(+), 4 deletions(-) |
14 |
|
15 |
diff --git a/bashast/bashast.g b/bashast/bashast.g |
16 |
index 700f865..8d627c4 100644 |
17 |
--- a/bashast/bashast.g |
18 |
+++ b/bashast/bashast.g |
19 |
@@ -600,9 +600,9 @@ condition_expr |
20 |
#endif |
21 |
|
22 |
keyword_condition_and |
23 |
- : keyword_condition_primary (BLANK!? LOGICAND^ BLANK!? keyword_condition_primary)?; |
24 |
+ : keyword_condition_primary (BLANK!? LOGICAND^ BLANK!? keyword_condition_primary)*; |
25 |
keyword_condition |
26 |
- : keyword_condition_and (BLANK!? LOGICOR^ BLANK!? keyword_condition_and)?; |
27 |
+ : keyword_condition_and (BLANK!? LOGICOR^ BLANK!? keyword_condition_and)*; |
28 |
keyword_negation_primary |
29 |
: BANG BLANK keyword_condition_primary -> ^(NEGATION keyword_condition_primary); |
30 |
keyword_condition_primary |
31 |
@@ -655,9 +655,9 @@ keyword_binary_string_operator |
32 |
|
33 |
|
34 |
builtin_condition_and |
35 |
- : builtin_condition_primary (builtin_logic_and^ BLANK! builtin_condition_primary)?; |
36 |
+ : builtin_condition_primary (builtin_logic_and^ BLANK! builtin_condition_primary)*; |
37 |
builtin_condition |
38 |
- : builtin_condition_and (builtin_logic_or^ BLANK! builtin_condition_and)?; |
39 |
+ : builtin_condition_and (builtin_logic_or^ BLANK! builtin_condition_and)*; |
40 |
builtin_negation_primary |
41 |
: BANG BLANK builtin_condition_primary -> ^(NEGATION builtin_condition_primary); |
42 |
builtin_condition_primary |
43 |
|
44 |
diff --git a/bashast/gunit/cond_main.gunit b/bashast/gunit/cond_main.gunit |
45 |
index bf86d7d..cb8ffef 100644 |
46 |
--- a/bashast/gunit/cond_main.gunit |
47 |
+++ b/bashast/gunit/cond_main.gunit |
48 |
@@ -34,9 +34,13 @@ condition_expr: |
49 |
"[ -n \"$FROM_LANG\" -a -n \"$TO_LANG\" ]" -> (BUILTIN_TEST (BUILTIN_LOGIC_AND (n (STRING (DOUBLE_QUOTED_STRING (VAR_REF FROM_LANG)))) (n (STRING (DOUBLE_QUOTED_STRING (VAR_REF TO_LANG)))))) |
50 |
"[ -n \"$FROM_LANG\" -o -n \"$TO_LANG\" ]" -> (BUILTIN_TEST (BUILTIN_LOGIC_OR (n (STRING (DOUBLE_QUOTED_STRING (VAR_REF FROM_LANG)))) (n (STRING (DOUBLE_QUOTED_STRING (VAR_REF TO_LANG)))))) |
51 |
"[ -n \"a\" -o -n \"a\" -a -n \"a\" ]" -> (BUILTIN_TEST (BUILTIN_LOGIC_OR (n (STRING (DOUBLE_QUOTED_STRING a))) (BUILTIN_LOGIC_AND (n (STRING (DOUBLE_QUOTED_STRING a))) (n (STRING (DOUBLE_QUOTED_STRING a)))))) |
52 |
+"[ -n \"a\" -a -n \"a\" -a -n \"a\" ]" -> (BUILTIN_TEST (BUILTIN_LOGIC_AND (BUILTIN_LOGIC_AND (n (STRING (DOUBLE_QUOTED_STRING a))) (n (STRING (DOUBLE_QUOTED_STRING a)))) (n (STRING (DOUBLE_QUOTED_STRING a))))) |
53 |
+"[ -n \"a\" -o -n \"a\" -o -n \"a\" ]" -> (BUILTIN_TEST (BUILTIN_LOGIC_OR (BUILTIN_LOGIC_OR (n (STRING (DOUBLE_QUOTED_STRING a))) (n (STRING (DOUBLE_QUOTED_STRING a)))) (n (STRING (DOUBLE_QUOTED_STRING a))))) |
54 |
"[[ \"${element}\" =~ (^[^[:space:]]+\ .) ]]" -> (KEYWORD_TEST (MATCH_REGULAR_EXPRESSION (STRING (DOUBLE_QUOTED_STRING (VAR_REF element))) (STRING ( ^ [ ^ [ : space : ] ] + \ . )))) |
55 |
"[[ a<b ]]" -> (KEYWORD_TEST (< (STRING a) (STRING b))) |
56 |
"[[ a>b ]]" -> (KEYWORD_TEST (> (STRING a) (STRING b))) |
57 |
"[[ ${VIRTUALX_REQUIRED} == always || ${VIRTUALX_REQUIRED} == test ]]" -> (KEYWORD_TEST (|| (MATCH_PATTERN (STRING (VAR_REF VIRTUALX_REQUIRED)) (STRING always)) (MATCH_PATTERN (STRING (VAR_REF VIRTUALX_REQUIRED)) (STRING test)))) |
58 |
"[[ a == b || c == d && e == f ]]" -> (KEYWORD_TEST (|| (MATCH_PATTERN (STRING a) (STRING b)) (&& (MATCH_PATTERN (STRING c) (STRING d)) (MATCH_PATTERN (STRING e) (STRING f))))) |
59 |
"[[ a == b && c == d || e == f ]]" -> (KEYWORD_TEST (|| (&& (MATCH_PATTERN (STRING a) (STRING b)) (MATCH_PATTERN (STRING c) (STRING d))) (MATCH_PATTERN (STRING e) (STRING f)))) |
60 |
+"[[ a == b && c == d && e == f ]]" -> (KEYWORD_TEST (&& (&& (MATCH_PATTERN (STRING a) (STRING b)) (MATCH_PATTERN (STRING c) (STRING d))) (MATCH_PATTERN (STRING e) (STRING f)))) |
61 |
+"[[ a == b || c == d || e == f ]]" -> (KEYWORD_TEST (|| (|| (MATCH_PATTERN (STRING a) (STRING b)) (MATCH_PATTERN (STRING c) (STRING d))) (MATCH_PATTERN (STRING e) (STRING f)))) |