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 => { ExpressionKindHint::Block => {
let span = (first.span.start, second.span.end); let span = (first.span.start, second.span.end);
let string: Spanned<String> = match first { let path: Spanned<hir::RawExpression> = match first {
Spanned { Spanned {
item: hir::RawExpression::Literal(hir::Literal::Bare), item: hir::RawExpression::Literal(hir::Literal::Bare),
span, 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 { Spanned {
item: hir::RawExpression::Literal(hir::Literal::String(inner)), item: hir::RawExpression::Literal(hir::Literal::String(inner)),
span, 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( return Err(ShellError::unimplemented(
"The first part of a block must be a string", "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::Binary::new(path, *op, second);
let binary = hir::RawExpression::Binary(Box::new(binary)); let binary = hir::RawExpression::Binary(Box::new(binary));
let binary = Spanned::from_item(binary, span); let binary = Spanned::from_item(binary, span);