Fix raw as a variable

This commit is contained in:
Jonathan Turner 2019-06-23 06:32:58 +12:00
parent 9af08eb911
commit 37c4fb92f8

View file

@ -82,15 +82,43 @@ pub fn baseline_parse_next_expr(
ExpressionKindHint::Block => {
let span = (first.span.start, second.span.end);
let string: Spanned<String> = match first {
let path: Spanned<hir::RawExpression> = match first {
Spanned {
item: hir::RawExpression::Literal(hir::Literal::Bare),
span,
} => Spanned::from_item(span.slice(source).to_string(), span),
} => {
let string = Spanned::from_item(span.slice(source).to_string(), span);
let path = hir::Path::new(
Spanned::from_item(
// TODO: Deal with synthetic nodes that have no representation at all in source
hir::RawExpression::Variable(hir::Variable::It(Span::from((0, 0)))),
(0, 0),
),
vec![string],
);
let path = hir::RawExpression::Path(Box::new(path));
Spanned { item: path, span: first.span }
}
Spanned {
item: hir::RawExpression::Literal(hir::Literal::String(inner)),
span,
} => Spanned::from_item(inner.slice(source).to_string(), span),
} => {
let string = Spanned::from_item(inner.slice(source).to_string(), span);
let path = hir::Path::new(
Spanned::from_item(
// TODO: Deal with synthetic nodes that have no representation at all in source
hir::RawExpression::Variable(hir::Variable::It(Span::from((0, 0)))),
(0, 0),
),
vec![string],
);
let path = hir::RawExpression::Path(Box::new(path));
Spanned { item: path, span: first.span }
}
Spanned {
item: hir::RawExpression::Variable(..),
..
} => first,
_ => {
return Err(ShellError::unimplemented(
"The first part of a block must be a string",
@ -98,17 +126,6 @@ pub fn baseline_parse_next_expr(
}
};
let path = hir::Path::new(
Spanned::from_item(
// TODO: Deal with synthetic nodes that have no representation at all in source
hir::RawExpression::Variable(hir::Variable::It(Span::from((0, 0)))),
(0, 0),
),
vec![string],
);
let path = hir::RawExpression::Path(Box::new(path));
let path = Spanned::from_item(path, first.span);
let binary = hir::Binary::new(path, *op, second);
let binary = hir::RawExpression::Binary(Box::new(binary));
let binary = Spanned::from_item(binary, span);