| summaryrefslogtreecommitdiff | 
diff options
Diffstat (limited to 'src')
| -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(); | 


