mirror of
https://github.com/RGBCube/uutils-coreutils
synced 2025-07-27 19:17:43 +00:00
Merge pull request #8162 from tgrez/main
expr: fix builtin functions precedence
This commit is contained in:
commit
c9f76d41a7
2 changed files with 37 additions and 7 deletions
|
@ -676,8 +676,8 @@ impl<'a, S: AsRef<str>> Parser<'a, S> {
|
|||
let first = self.next()?;
|
||||
let inner = match first {
|
||||
"match" => {
|
||||
let left = self.parse_expression()?;
|
||||
let right = self.parse_expression()?;
|
||||
let left = self.parse_simple_expression()?;
|
||||
let right = self.parse_simple_expression()?;
|
||||
AstNodeInner::BinOp {
|
||||
op_type: BinOp::String(StringOp::Match),
|
||||
left: Box::new(left),
|
||||
|
@ -695,8 +695,8 @@ impl<'a, S: AsRef<str>> Parser<'a, S> {
|
|||
}
|
||||
}
|
||||
"index" => {
|
||||
let left = self.parse_expression()?;
|
||||
let right = self.parse_expression()?;
|
||||
let left = self.parse_simple_expression()?;
|
||||
let right = self.parse_simple_expression()?;
|
||||
AstNodeInner::BinOp {
|
||||
op_type: BinOp::String(StringOp::Index),
|
||||
left: Box::new(left),
|
||||
|
@ -704,7 +704,7 @@ impl<'a, S: AsRef<str>> Parser<'a, S> {
|
|||
}
|
||||
}
|
||||
"length" => {
|
||||
let string = self.parse_expression()?;
|
||||
let string = self.parse_simple_expression()?;
|
||||
AstNodeInner::Length {
|
||||
string: Box::new(string),
|
||||
}
|
||||
|
|
|
@ -508,14 +508,44 @@ fn test_substr() {
|
|||
}
|
||||
|
||||
#[test]
|
||||
fn test_substr_precedence() {
|
||||
fn test_builtin_functions_precedence() {
|
||||
new_ucmd!()
|
||||
.args(&["substr", "ab cd", "3", "1", "!=", " "])
|
||||
.fails_with_code(1)
|
||||
.stdout_only("0\n");
|
||||
|
||||
new_ucmd!()
|
||||
.args(&["substr", "ab cd", "2", "1", "!=", " "])
|
||||
.args(&["substr", "ab cd", "3", "1", "=", " "])
|
||||
.succeeds()
|
||||
.stdout_only("1\n");
|
||||
|
||||
new_ucmd!()
|
||||
.args(&["length", "abcd", "!=", "4"])
|
||||
.fails_with_code(1)
|
||||
.stdout_only("0\n");
|
||||
|
||||
new_ucmd!()
|
||||
.args(&["length", "abcd", "=", "4"])
|
||||
.succeeds()
|
||||
.stdout_only("1\n");
|
||||
|
||||
new_ucmd!()
|
||||
.args(&["index", "abcd", "c", "!=", "3"])
|
||||
.fails_with_code(1)
|
||||
.stdout_only("0\n");
|
||||
|
||||
new_ucmd!()
|
||||
.args(&["index", "abcd", "c", "=", "3"])
|
||||
.succeeds()
|
||||
.stdout_only("1\n");
|
||||
|
||||
new_ucmd!()
|
||||
.args(&["match", "abcd", "ab\\(.*\\)", "!=", "cd"])
|
||||
.fails_with_code(1)
|
||||
.stdout_only("0\n");
|
||||
|
||||
new_ucmd!()
|
||||
.args(&["match", "abcd", "ab\\(.*\\)", "=", "cd"])
|
||||
.succeeds()
|
||||
.stdout_only("1\n");
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue