1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-31 15:28:11 +00:00

Shell: Use the correct range for named variable expansions

Previously we were starting the variable expansions before the starting
'$' and calculating the wrong length, this commit makes it so we
calculate the right range for them.
This commit is contained in:
Ali Mohammad Pur 2023-04-18 16:46:25 +03:30 committed by Ali Mohammad Pur
parent 79c76d67ce
commit 93413f8682
2 changed files with 12 additions and 12 deletions

View file

@ -41,7 +41,7 @@ ErrorOr<Vector<Token>> Lexer::batch_next(Optional<Reduction> starting_reduction)
ExpansionRange Lexer::range(ssize_t offset) const
{
return {
m_state.position.end_offset - m_state.position.start_offset + offset - 1,
m_state.position.end_offset - m_state.position.start_offset + offset,
0,
};
}
@ -358,15 +358,15 @@ ErrorOr<Lexer::ReductionResult> Lexer::reduce_double_quoted_string()
};
case '$':
if (m_lexer.next_is("("))
m_state.expansions.empend(CommandExpansion { .command = StringBuilder {}, .range = range() });
m_state.expansions.empend(CommandExpansion { .command = StringBuilder {}, .range = range(-1) });
else
m_state.expansions.empend(ParameterExpansion { .parameter = StringBuilder {}, .range = range() });
m_state.expansions.empend(ParameterExpansion { .parameter = StringBuilder {}, .range = range(-1) });
return ReductionResult {
.tokens = {},
.next_reduction = Reduction::Expansion,
};
case '`':
m_state.expansions.empend(CommandExpansion { .command = StringBuilder {}, .range = range() });
m_state.expansions.empend(CommandExpansion { .command = StringBuilder {}, .range = range(-1) });
return ReductionResult {
.tokens = {},
.next_reduction = Reduction::CommandExpansion,
@ -498,9 +498,9 @@ ErrorOr<Lexer::ReductionResult> Lexer::reduce_heredoc_contents()
if (!m_state.escaping && consume_specific('$')) {
m_state.buffer.append('$');
if (m_lexer.next_is("("))
m_state.expansions.empend(CommandExpansion { .command = StringBuilder {}, .range = range() });
m_state.expansions.empend(CommandExpansion { .command = StringBuilder {}, .range = range(-1) });
else
m_state.expansions.empend(ParameterExpansion { .parameter = StringBuilder {}, .range = range() });
m_state.expansions.empend(ParameterExpansion { .parameter = StringBuilder {}, .range = range(-1) });
return ReductionResult {
.tokens = {},
@ -510,7 +510,7 @@ ErrorOr<Lexer::ReductionResult> Lexer::reduce_heredoc_contents()
if (!m_state.escaping && consume_specific('`')) {
m_state.buffer.append('`');
m_state.expansions.empend(CommandExpansion { .command = StringBuilder {}, .range = range() });
m_state.expansions.empend(CommandExpansion { .command = StringBuilder {}, .range = range(-1) });
return ReductionResult {
.tokens = {},
.next_reduction = Reduction::CommandExpansion,
@ -682,9 +682,9 @@ ErrorOr<Lexer::ReductionResult> Lexer::reduce_start()
if (!m_state.escaping && consume_specific('$')) {
m_state.buffer.append('$');
if (m_lexer.next_is("("))
m_state.expansions.empend(CommandExpansion { .command = StringBuilder {}, .range = range() });
m_state.expansions.empend(CommandExpansion { .command = StringBuilder {}, .range = range(-1) });
else
m_state.expansions.empend(ParameterExpansion { .parameter = StringBuilder {}, .range = range() });
m_state.expansions.empend(ParameterExpansion { .parameter = StringBuilder {}, .range = range(-1) });
return ReductionResult {
.tokens = {},
@ -694,7 +694,7 @@ ErrorOr<Lexer::ReductionResult> Lexer::reduce_start()
if (!m_state.escaping && consume_specific('`')) {
m_state.buffer.append('`');
m_state.expansions.empend(CommandExpansion { .command = StringBuilder {}, .range = range() });
m_state.expansions.empend(CommandExpansion { .command = StringBuilder {}, .range = range(-1) });
return ReductionResult {
.tokens = {},
.next_reduction = Reduction::CommandExpansion,
@ -749,7 +749,7 @@ ErrorOr<Lexer::ReductionResult> Lexer::reduce_special_parameter_expansion()
m_state.buffer.append(ch);
m_state.expansions.last() = ParameterExpansion {
.parameter = StringBuilder {},
.range = range(-1),
.range = range(-2),
};
auto& expansion = m_state.expansions.last().get<ParameterExpansion>();
expansion.parameter.append(ch);