aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/parse.rs12
1 files changed, 7 insertions, 5 deletions
diff --git a/src/parse.rs b/src/parse.rs
index b2433a8..45bfdc0 100644
--- a/src/parse.rs
+++ b/src/parse.rs
@@ -34,7 +34,7 @@ pub enum Ast<T: Stage> {
impl Ast<PreExpansion> {
pub fn expand<E: Expander>(self, e: &mut E) -> Res<Ast<PostExpansion>, E::Error> {
match self {
- Ast::AssignVar(assign_var) => todo!(),
+ Ast::AssignVar(_) => todo!(),
Ast::Pipes(pipes) => Ok(Ast::Pipes(pipes.expand(e)?)),
}
}
@@ -119,7 +119,7 @@ fn is_var_name(x: u8) -> bool {
}
#[derive(Debug, Clone)]
-struct VarName {
+pub struct VarName {
name: BString,
}
@@ -215,7 +215,10 @@ impl Parse for ExpString {
let x = b.peek();
- if is_var_begin(x) {
+ if x == b'?' || x == b'!' {
+ b.adv();
+ p.push(StringPart::Var(VarName { name: vec![x] }))
+ } else if is_var_begin(x) {
let v = VarName::parse(b)?;
p.push(StringPart::Var(v));
} else if x == b'{' {
@@ -284,6 +287,7 @@ impl Command<PreExpansion> {
}
}
+#[allow(unused)]
#[derive(Debug)]
pub enum ParseError {
/// "clean" EOF, i.e. not in the middle of something
@@ -292,8 +296,6 @@ pub enum ParseError {
/// "unclean" EOF, i.e. EOF after beginning a quoted string
Incomplete,
- UnexpectedPipe,
-
ExpectedAlphabetic,
Unknown(u8),