| summaryrefslogtreecommitdiff |
diff options
| author | Nathanael Sensfelder <SpamShield0@MultiAgentSystems.org> | 2021-10-24 02:15:13 +0200 |
|---|---|---|
| committer | Nathanael Sensfelder <SpamShield0@MultiAgentSystems.org> | 2021-10-24 02:15:13 +0200 |
| commit | 4b86ef77955f5bb4f134252c15ef30fd51a243c3 (patch) | |
| tree | 33d7e33bb799c72feda9bfaf0df8fcee2c51a180 /src/core | |
| parent | 87b3ce9b51499ac51027fcdd5cd971a16e5e844a (diff) | |
Fixes lambda functions not always working.
Diffstat (limited to 'src/core')
| -rw-r--r-- | src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/ComputationCompiler.java | 65 | ||||
| -rw-r--r-- | src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/computation/generic/LambdaEvaluationCompiler.java | 2 |
2 files changed, 36 insertions, 31 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 ac905d0..948542c 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 @@ -734,8 +734,8 @@ implements tonkadur.fate.v1.lang.meta.ComputationVisitor final ComputationCompiler expr_compiler; final Type result_type; final String context_name; - final Register lambda_data_register; - final Address lambda_function_line_address; + final Register result, lambda_data_register; + final Address result_line_address; int i; out_label = compiler.assembler().generate_label("<lambda_expr#out>"); @@ -744,7 +744,32 @@ implements tonkadur.fate.v1.lang.meta.ComputationVisitor parameters = new ArrayList<Register>(); side_channel_parameters = new ArrayList<Register>(); - lambda_data_register = reserve(DictType.WILD); + result = reserve(DictType.WILD); + + result_line_address = + new RelativeAddress + ( + result.get_address(), + Constant.string_value("l"), + Type.INT + ); + + init_instructions.add + ( + new Initialize(result_line_address, Type.INT) + ); + + init_instructions.add + ( + new SetValue + ( + result_line_address, + compiler.assembler().get_label_constant(in_label) + ) + ); + + result_as_computation = result.get_value(); + result_as_address = result.get_address(); context_name = compiler.registers().create_stackable_context_name(); @@ -784,12 +809,16 @@ implements tonkadur.fate.v1.lang.meta.ComputationVisitor init_instructions ); + lambda_data_register = + compiler.registers().reserve + ( + DictType.WILD, + init_instructions + ); + side_channel_parameters.add(result_holder); side_channel_parameters.add(lambda_data_register); - // TODO: read two params: - // - result holder - // - wild dict, where the real params are. init_instructions.addAll ( compiler.registers().read_parameters(side_channel_parameters) @@ -881,30 +910,6 @@ implements tonkadur.fate.v1.lang.meta.ComputationVisitor compiler.registers().pop_context(); - lambda_function_line_address = - new RelativeAddress - ( - lambda_data_register.get_address(), - Constant.string_value("l"), - Type.INT - ); - - init_instructions.add - ( - new Initialize(lambda_function_line_address, Type.INT) - ); - - init_instructions.add - ( - new SetValue - ( - lambda_function_line_address, - compiler.assembler().get_label_constant(in_label) - ) - ); - - result_as_computation = lambda_data_register.get_value(); - result_as_address = lambda_data_register.get_address(); } @Override diff --git a/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/computation/generic/LambdaEvaluationCompiler.java b/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/computation/generic/LambdaEvaluationCompiler.java index 825491d..179d554 100644 --- a/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/computation/generic/LambdaEvaluationCompiler.java +++ b/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/computation/generic/LambdaEvaluationCompiler.java @@ -54,7 +54,7 @@ public class LambdaEvaluationCompiler extends GenericComputationCompiler assimilate(lambda_cc); - result = reserve(DictType.WILD); + result = reserve(TypeCompiler.compile(compiler, source.get_type())); result_as_address = result.get_address(); result_as_computation = result.get_value(); |


