refactor for readablity, keep semantics identical

This commit is contained in:
Bahex 2024-12-12 05:04:47 +03:00
parent baf86dfb0e
commit 6eee83b38d

View File

@ -335,28 +335,27 @@ pub(crate) fn compile_load_env(
path: &[PathMember], path: &[PathMember],
out_reg: RegId, out_reg: RegId,
) -> Result<(), CompileError> { ) -> Result<(), CompileError> {
if path.is_empty() { match path {
builder.push( [] => builder.push(
Instruction::LoadVariable { Instruction::LoadVariable {
dst: out_reg, dst: out_reg,
var_id: ENV_VARIABLE_ID, var_id: ENV_VARIABLE_ID,
} }
.into_spanned(span), .into_spanned(span),
)?; )?,
} else { [PathMember::Int { span, .. }, ..] => {
let (key, optional) = match &path[0] {
PathMember::String { val, optional, .. } => (builder.data(val)?, *optional),
PathMember::Int { span, .. } => {
return Err(CompileError::AccessEnvByInt { span: *span }) return Err(CompileError::AccessEnvByInt { span: *span })
} }
}; [PathMember::String {
let tail = &path[1..]; val: key, optional, ..
}, tail @ ..] => {
let key = builder.data(key)?;
if optional { builder.push(if *optional {
builder.push(Instruction::LoadEnvOpt { dst: out_reg, key }.into_spanned(span))?; Instruction::LoadEnvOpt { dst: out_reg, key }.into_spanned(span)
} else { } else {
builder.push(Instruction::LoadEnv { dst: out_reg, key }.into_spanned(span))?; Instruction::LoadEnv { dst: out_reg, key }.into_spanned(span)
} })?;
if !tail.is_empty() { if !tail.is_empty() {
let path = builder.literal( let path = builder.literal(
@ -374,5 +373,6 @@ pub(crate) fn compile_load_env(
)?; )?;
} }
} }
}
Ok(()) Ok(())
} }