From b6664aacfd8bbf7809c270261fb8d9636dbe8b05 Mon Sep 17 00:00:00 2001 From: Rerumu Date: Mon, 25 Apr 2022 18:29:06 -0400 Subject: [PATCH] Fix bad local variable generation --- codegen-luajit/src/gen.rs | 9 +++++++-- codegen-luau/src/gen.rs | 9 +++++++-- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/codegen-luajit/src/gen.rs b/codegen-luajit/src/gen.rs index 5457af3..a5b8cdd 100644 --- a/codegen-luajit/src/gen.rs +++ b/codegen-luajit/src/gen.rs @@ -125,13 +125,18 @@ fn write_call_store(result: Range, w: Writer) -> Result<()> { } fn write_variable_list(func: &Function, w: Writer) -> Result<()> { + let mut total = 0; + for data in &func.local_data { - let range = 0..data.count().try_into().unwrap(); + let range = total..total + usize::try_from(data.count()).unwrap(); + let typed = data.value_type(); + + total = range.end; write!(w, "local ")?; write_ascending("loc", range.clone(), w)?; write!(w, " = ")?; - write_separated(range, |_, w| write!(w, "ZERO_{} ", data.value_type()), w)?; + write_separated(range, |_, w| write!(w, "ZERO_{} ", typed), w)?; } if func.num_stack != 0 { diff --git a/codegen-luau/src/gen.rs b/codegen-luau/src/gen.rs index 27f3e51..cfce648 100644 --- a/codegen-luau/src/gen.rs +++ b/codegen-luau/src/gen.rs @@ -124,13 +124,18 @@ fn write_call_store(result: Range, w: Writer) -> Result<()> { } fn write_variable_list(func: &Function, w: Writer) -> Result<()> { + let mut total = 0; + for data in &func.local_data { - let range = 0..data.count().try_into().unwrap(); + let range = total..total + usize::try_from(data.count()).unwrap(); + let typed = data.value_type(); + + total = range.end; write!(w, "local ")?; write_ascending("loc", range.clone(), w)?; write!(w, " = ")?; - write_separated(range, |_, w| write!(w, "ZERO_{} ", data.value_type()), w)?; + write_separated(range, |_, w| write!(w, "ZERO_{} ", typed), w)?; } if func.num_stack != 0 {