From e6ae3c38007df8cd139b34f88c1eaeb07f647163 Mon Sep 17 00:00:00 2001 From: Nathanael Sensfelder Date: Fri, 14 Aug 2020 23:58:24 +0200 Subject: Alright, it's all there, it compiles. Will it run? --- .../v1/compiler/fate/v1/ComputationCompiler.java | 6 +- .../wyrd/v1/compiler/fate/v1/SequenceCompiler.java | 84 +++++++++++++++++++--- 2 files changed, 80 insertions(+), 10 deletions(-) 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 456e681..575af47 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 @@ -1384,8 +1384,10 @@ implements tonkadur.fate.v1.lang.meta.ComputationVisitor compiler.registers().bind(param.get_name(), r); } - compiler.registers().read_parameters(parameters); - + init_instructions.addAll + ( + compiler.registers().read_parameters(parameters) + ); expr_compiler = new ComputationCompiler(compiler); diff --git a/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/SequenceCompiler.java b/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/SequenceCompiler.java index b397dd2..02283fa 100644 --- a/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/SequenceCompiler.java +++ b/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/SequenceCompiler.java @@ -1,10 +1,12 @@ package tonkadur.wyrd.v1.compiler.fate.v1; import java.util.List; +import java.util.ArrayList; import tonkadur.wyrd.v1.lang.meta.Instruction; import tonkadur.wyrd.v1.lang.World; +import tonkadur.wyrd.v1.lang.Register; public class SequenceCompiler { @@ -18,10 +20,23 @@ public class SequenceCompiler ) throws Throwable { + final List init_instructions; + final List parameters; + final List to_be_cleaned; final InstructionCompiler ic; + init_instructions = new ArrayList(); + parameters = new ArrayList(); + to_be_cleaned = new ArrayList(); ic = new InstructionCompiler(compiler); + + compiler.world().add_sequence_label + ( + fate_sequence.get_name(), + (compiler.world().get_current_line() + 1) + ); + compiler.assembler().add_fixed_name_label(fate_sequence.get_name()); System.out.println @@ -31,21 +46,74 @@ public class SequenceCompiler + "'..." ); + compiler.registers().create_stackable_context(fate_sequence.get_name()); + + init_instructions.add + ( + compiler.assembler().mark + ( + fate_sequence.get_name(), + compiler.assembler().merge + ( + compiler.registers().get_initialize_context_instructions + ( + fate_sequence.get_name() + ) + ) + ) + ); + + compiler.registers().push_context(fate_sequence.get_name()); + + for + ( + final tonkadur.fate.v1.lang.Variable param: + fate_sequence.get_signature() + ) + { + final Register r; + + r = + compiler.registers().reserve + ( + TypeCompiler.compile(compiler, param.get_type()) + ); + + parameters.add(r); + to_be_cleaned.add(r); + + compiler.registers().bind(param.get_name(), r); + } + + init_instructions.addAll + ( + compiler.registers().read_parameters(parameters) + ); + fate_sequence.get_root().get_visited_by(ic); - compiler.world().add_sequence_label + init_instructions.add(ic.get_result()); + + init_instructions.addAll ( - fate_sequence.get_name(), - (compiler.world().get_current_line() + 1) + compiler.registers().get_finalize_context_instructions() ); + init_instructions.addAll + ( + compiler.registers().get_leave_context_instructions() + ); + + for (final Register r: to_be_cleaned) + { + compiler.registers().release(r); + } + + compiler.registers().pop_context(); + compiler.assembler().handle_adding_instruction ( - compiler.assembler().mark - ( - fate_sequence.get_name(), - ic.get_result() - ), + compiler.assembler().merge(init_instructions), compiler.world() ); } -- cgit v1.2.3-70-g09d2