| summaryrefslogtreecommitdiff | 
diff options
| author | Nathanael Sensfelder <SpamShield0@MultiAgentSystems.org> | 2020-08-14 23:12:21 +0200 | 
|---|---|---|
| committer | Nathanael Sensfelder <SpamShield0@MultiAgentSystems.org> | 2020-08-14 23:12:21 +0200 | 
| commit | 2c2199dcd2e6784fca93b42bcc2f6d7c9d8e2291 (patch) | |
| tree | 50ed5c64e1d97c2d99940e6c0991bf05d24bae18 /src | |
| parent | e498c87926a76f21937af2e5b1b08e88f78178c1 (diff) | |
Hey, it compiles...
Diffstat (limited to 'src')
5 files changed, 90 insertions, 39 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 6115e6e..456e681 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 @@ -17,6 +17,7 @@ import tonkadur.wyrd.v1.lang.type.Type;  import tonkadur.wyrd.v1.lang.type.PointerType;  import tonkadur.wyrd.v1.lang.instruction.SetValue; +import tonkadur.wyrd.v1.lang.instruction.SetPC;  import tonkadur.wyrd.v1.compiler.util.BinarySearch;  import tonkadur.wyrd.v1.compiler.util.IfElse; @@ -1336,7 +1337,8 @@ implements tonkadur.fate.v1.lang.meta.ComputationVisitor        final String out_label, in_label;        final List<Register> parameters;        final Register result_holder; -      final ComputationCompiler expr_cc; +      final ComputationCompiler expr_compiler; +      final Type result_type;        final String context_name;        out_label = compiler.assembler().generate_label("<lambda_expr#out>"); @@ -1346,9 +1348,9 @@ implements tonkadur.fate.v1.lang.meta.ComputationVisitor        (           compiler.assembler().mark_after           ( -            new SetPC(compiler.assembler().get_label_constant(out_label)) -         ), -         in_label +            new SetPC(compiler.assembler().get_label_constant(out_label)), +            in_label +         )        );        parameters = new ArrayList<Register>(); @@ -1364,18 +1366,10 @@ implements tonkadur.fate.v1.lang.meta.ComputationVisitor        compiler.registers().push_context(context_name); -      result_holder = -         reserve -         ( -            new PointerType -            ( -               TypeCompiler.compile -               ( -                  compiler, -                  n.get_lambda_function().get_type() -               ) -            ) -         ); +      result_type = +         TypeCompiler.compile(compiler, n.get_lambda_function().get_type()); + +      result_holder = reserve(new PointerType(result_type));        parameters.add(result_holder); @@ -1387,7 +1381,7 @@ implements tonkadur.fate.v1.lang.meta.ComputationVisitor           parameters.add(r); -         compiler.registers().bind(r, param.get_name()); +         compiler.registers().bind(param.get_name(), r);        }        compiler.registers().read_parameters(parameters); @@ -1403,14 +1397,14 @@ implements tonkadur.fate.v1.lang.meta.ComputationVisitor        (           new SetValue           ( -            result_holder.get_value(), +            new Address(result_holder.get_value(), result_type),              expr_compiler.get_computation()           )        );        init_instructions.addAll        ( -         compiler.registers().get_finalize_context_instructions(context_name) +         compiler.registers().get_finalize_context_instructions()        );        init_instructions.add @@ -1419,13 +1413,13 @@ implements tonkadur.fate.v1.lang.meta.ComputationVisitor           (              compiler.assembler().merge              ( -               compiler.registers().get_exit_context_instructions() +               compiler.registers().get_leave_context_instructions()              ),              out_label           )        ); -      compiler.registers().pop_context(context_name); +      compiler.registers().pop_context();        result_as_computation = compiler.assembler().get_label_constant(in_label);     } @@ -1442,7 +1436,8 @@ implements tonkadur.fate.v1.lang.meta.ComputationVisitor        final Register result;        final String return_to_label; -      target_line_cc = new ComputationCompiler(); +      parameters = new ArrayList<Computation>(); +      target_line_cc = new ComputationCompiler(compiler);        return_to_label =           compiler.assembler().generate_label("<lambda_eval#return_to>"); @@ -1473,7 +1468,7 @@ implements tonkadur.fate.v1.lang.meta.ComputationVisitor        init_instructions.addAll        ( -         compiler.registers().store_parameters(parameters); +         compiler.registers().store_parameters(parameters)        );        init_instructions.add @@ -1485,7 +1480,7 @@ implements tonkadur.fate.v1.lang.meta.ComputationVisitor                 compiler.registers().get_visit_context_instructions                 (                    target_line_cc.get_computation(), -                  return_to_label +                  compiler.assembler().get_label_constant(return_to_label)                 )              ),              return_to_label diff --git a/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/InstructionCompiler.java b/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/InstructionCompiler.java index e5d4342..961fd10 100644 --- a/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/InstructionCompiler.java +++ b/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/InstructionCompiler.java @@ -235,9 +235,13 @@ implements tonkadur.fate.v1.lang.meta.InstructionVisitor     {        final Register r; -      r = compiler.registers().reserve(n.get_type()); +      r = +         compiler.registers().reserve +         ( +            TypeCompiler.compile(compiler, n.get_variable().get_type()) +         ); -      compiler.registers().bind(r, n.get_name()); +      compiler.registers().bind(n.get_variable().get_name(), r);     }     @Override @@ -1662,12 +1666,15 @@ implements tonkadur.fate.v1.lang.meta.InstructionVisitor     )     throws Throwable     { -      final List<ComputationCompiler> parameters; +      final List<ComputationCompiler> parameter_ccs; +      final List<Computation> parameters; +        final String return_to_label;        return_to_label =           compiler.assembler().generate_label("<seq_call#return_to>"); +      parameter_ccs = new ArrayList<ComputationCompiler>();        parameters = new ArrayList<Computation>();        for @@ -1687,6 +1694,7 @@ implements tonkadur.fate.v1.lang.meta.InstructionVisitor           }           parameters.add(cc.get_computation()); +         parameter_ccs.add(cc);        }        result.addAll(compiler.registers().store_parameters(parameters)); @@ -1703,14 +1711,14 @@ implements tonkadur.fate.v1.lang.meta.InstructionVisitor                    (                       n.get_sequence_name()                    ), -                  return_to_label +                  compiler.assembler().get_label_constant(return_to_label)                 )              ),              return_to_label           )        ); -      for (final ComputationCompiler cc: parameters) +      for (final ComputationCompiler cc: parameter_ccs)        {           cc.release_registers();        } @@ -1723,8 +1731,10 @@ implements tonkadur.fate.v1.lang.meta.InstructionVisitor     )     throws Throwable     { -      final List<ComputationCompiler> parameters; +      final List<ComputationCompiler> parameter_ccs; +      final List<Computation> parameters; +      parameter_ccs = new ArrayList<ComputationCompiler>();        parameters = new ArrayList<Computation>();        for @@ -1744,6 +1754,7 @@ implements tonkadur.fate.v1.lang.meta.InstructionVisitor           }           parameters.add(cc.get_computation()); +         parameter_ccs.add(cc);        }        result.addAll(compiler.registers().store_parameters(parameters)); @@ -1756,7 +1767,7 @@ implements tonkadur.fate.v1.lang.meta.InstructionVisitor           )        ); -      for (final ComputationCompiler cc: parameters) +      for (final ComputationCompiler cc: parameter_ccs)        {           cc.release_registers();        } 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 3c45e83..620188b 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 @@ -6,17 +6,20 @@ import java.util.Collection;  import java.util.List;  import java.util.ArrayList; +import tonkadur.wyrd.v1.lang.meta.Instruction; +  import tonkadur.wyrd.v1.lang.Register;  import tonkadur.wyrd.v1.lang.type.Type;  class RegisterContext  { -   protected static final String name_prefix = ".anon."; +   protected static final String default_name_prefix = ".anon.";     protected final String name;     protected final Map<String, Register> register_by_name;     protected final Map<String, Register> aliased_registers;     protected final Map<Type, List<Register>> anonymous_register_by_type; +   protected final String name_prefix;     protected int generated_registers;     public RegisterContext (final String name) @@ -26,10 +29,28 @@ class RegisterContext        register_by_name = new HashMap<String, Register>();        aliased_registers = new HashMap<String, Register>();        anonymous_register_by_type = new HashMap<Type, List<Register>>(); +      name_prefix = default_name_prefix;        generated_registers = 0;     } +   public RegisterContext (final String name, final String name_prefix) +   { +      this.name = name; + +      register_by_name = new HashMap<String, Register>(); +      aliased_registers = new HashMap<String, Register>(); +      anonymous_register_by_type = new HashMap<Type, List<Register>>(); +      this.name_prefix = name_prefix; + +      generated_registers = 0; +   } + +   public String get_name () +   { +      return name; +   } +     public Collection<Register> get_all_registers ()     {        return register_by_name.values(); @@ -141,4 +162,9 @@ class RegisterContext     {        return new Register(t, name);     } + +   public List<Instruction> get_finalize_instructions () +   { +      return new ArrayList(); +   }  } 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 50e63d1..155f6d5 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 @@ -16,12 +16,19 @@ import tonkadur.wyrd.v1.lang.meta.Computation;  import tonkadur.wyrd.v1.lang.meta.Instruction;  import tonkadur.wyrd.v1.lang.computation.Address; +import tonkadur.wyrd.v1.lang.computation.RelativeAddress;  import tonkadur.wyrd.v1.lang.computation.Constant; +import tonkadur.wyrd.v1.lang.computation.ValueOf; +import tonkadur.wyrd.v1.lang.computation.Size; + +import tonkadur.wyrd.v1.lang.instruction.SetValue; +import tonkadur.wyrd.v1.lang.instruction.SetPC; +import tonkadur.wyrd.v1.lang.instruction.Remove;  import tonkadur.wyrd.v1.lang.type.Type; +import tonkadur.wyrd.v1.lang.type.MapType;  import tonkadur.wyrd.v1.lang.type.DictType; -  public class RegisterManager  {     protected static final String context_name_prefix = ".context."; @@ -205,7 +212,7 @@ public class RegisterManager        );        result.add(new Remove(return_to_address)); -      result.add(new SetPC(next.pc.get_value())); +      result.add(new SetPC(next_pc.get_value()));        return result;     } @@ -246,7 +253,7 @@ public class RegisterManager        {           final Register r; -         r = parameters_context.reserve(p.get_type()); +         r = parameter_context.reserve(p.get_type());           result.add(new SetValue(r.get_address(), p)); @@ -274,7 +281,7 @@ public class RegisterManager        {           final Register r; -         r = parameters_context.reserve(p.get_type()); +         r = parameter_context.reserve(p.get_type());           result.add(new SetValue(p.get_address(), r.get_value())); diff --git a/src/core/src/tonkadur/wyrd/v1/compiler/util/registers/StackableRegisterContext.java b/src/core/src/tonkadur/wyrd/v1/compiler/util/registers/StackableRegisterContext.java index 6a7ce1d..3327e2c 100644 --- a/src/core/src/tonkadur/wyrd/v1/compiler/util/registers/StackableRegisterContext.java +++ b/src/core/src/tonkadur/wyrd/v1/compiler/util/registers/StackableRegisterContext.java @@ -14,9 +14,15 @@ import tonkadur.wyrd.v1.lang.meta.Computation;  import tonkadur.wyrd.v1.lang.meta.Instruction;  import tonkadur.wyrd.v1.lang.computation.Address; +import tonkadur.wyrd.v1.lang.computation.Operation;  import tonkadur.wyrd.v1.lang.computation.RelativeAddress;  import tonkadur.wyrd.v1.lang.computation.Constant;  import tonkadur.wyrd.v1.lang.computation.Cast; +import tonkadur.wyrd.v1.lang.computation.New; +import tonkadur.wyrd.v1.lang.computation.ValueOf; + +import tonkadur.wyrd.v1.lang.instruction.SetValue; +import tonkadur.wyrd.v1.lang.instruction.Remove;  import tonkadur.wyrd.v1.lang.type.Type;  import tonkadur.wyrd.v1.lang.type.PointerType; @@ -32,7 +38,7 @@ class StackableRegisterContext extends RegisterContext     protected final Register context_stack_level;     protected final Register context_stacks;     protected final Address current_context_address_holder; -   protected final Computation current_context_address; +   protected final Address current_context_address;     public StackableRegisterContext     ( @@ -63,7 +69,12 @@ class StackableRegisterContext extends RegisterContext              new PointerType(context_structure)           ); -      current_context_address = new ValueOf(current_context_address_holder); +      current_context_address = +            new Address +            ( +               new ValueOf(current_context_address_holder), +               context_structure +            );     }     @Override @@ -110,7 +121,7 @@ class StackableRegisterContext extends RegisterContext           new SetValue           (              context_stack_level.get_address(), -            Operation.plus(context_stack_level.get_value, Constant.ONE) +            Operation.plus(context_stack_level.get_value(), Constant.ONE)           )        ); @@ -126,6 +137,7 @@ class StackableRegisterContext extends RegisterContext        return result;     } +   @Override     public List<Instruction> get_finalize_instructions ()     {        final List<Instruction> result; | 


