From 784341f1fa9eb276bb8afbf1c2fe8420f5ea6209 Mon Sep 17 00:00:00 2001 From: Nathanael Sensfelder Date: Mon, 25 Oct 2021 00:14:55 +0200 Subject: Fixes let releasing its registers too soon. --- .../tonkadur/wyrd/v1/compiler/fate/v1/ComputationCompiler.java | 8 +++----- .../tonkadur/wyrd/v1/compiler/util/registers/RegisterContext.java | 4 ++++ .../tonkadur/wyrd/v1/compiler/util/registers/RegisterManager.java | 5 +++++ 3 files changed, 12 insertions(+), 5 deletions(-) (limited to 'src/core') diff --git a/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/ComputationCompiler.java b/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/ComputationCompiler.java index 948542c..145a947 100644 --- a/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/ComputationCompiler.java +++ b/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/ComputationCompiler.java @@ -959,11 +959,9 @@ implements tonkadur.fate.v1.lang.meta.ComputationVisitor name = a.get_car().get_name(); r = - /* These are free by the unbind below */ - compiler.registers().reserve + reserve ( - TypeCompiler.compile(compiler, a.get_car().get_type()), - init_instructions + TypeCompiler.compile(compiler, a.get_car().get_type()) ); compiler.registers().bind(name, r); @@ -985,7 +983,7 @@ implements tonkadur.fate.v1.lang.meta.ComputationVisitor for (final String name: names) { - compiler.registers().unbind(name, init_instructions); + compiler.registers().unbind_but_do_not_free(name); } } diff --git a/src/core/src/tonkadur/wyrd/v1/compiler/util/registers/RegisterContext.java b/src/core/src/tonkadur/wyrd/v1/compiler/util/registers/RegisterContext.java index e83707b..b8440ae 100644 --- a/src/core/src/tonkadur/wyrd/v1/compiler/util/registers/RegisterContext.java +++ b/src/core/src/tonkadur/wyrd/v1/compiler/util/registers/RegisterContext.java @@ -151,7 +151,11 @@ class RegisterContext public void unbind (final String name, final List instr_holder) { release(aliased_registers.get(name), instr_holder); + unbind_but_do_not_free(name); + } + public void unbind_but_do_not_free(final String name) + { aliased_registers.remove(name); if (!hierarchical_aliases.isEmpty()) diff --git a/src/core/src/tonkadur/wyrd/v1/compiler/util/registers/RegisterManager.java b/src/core/src/tonkadur/wyrd/v1/compiler/util/registers/RegisterManager.java index 2d12e0a..b241386 100644 --- a/src/core/src/tonkadur/wyrd/v1/compiler/util/registers/RegisterManager.java +++ b/src/core/src/tonkadur/wyrd/v1/compiler/util/registers/RegisterManager.java @@ -162,6 +162,11 @@ public class RegisterManager context.peekFirst().unbind(name, instr_holder); } + public void unbind_but_do_not_free (final String name) + { + context.peekFirst().unbind_but_do_not_free(name); + } + public Register get_context_register (final String name) { final Register result; -- cgit v1.2.3-70-g09d2