| summaryrefslogtreecommitdiff | 
diff options
| author | Nathanael Sensfelder <SpamShield0@MultiAgentSystems.org> | 2020-09-08 12:52:30 +0200 | 
|---|---|---|
| committer | Nathanael Sensfelder <SpamShield0@MultiAgentSystems.org> | 2020-09-08 12:52:30 +0200 | 
| commit | 7d8ad25fb295d64c33f39273bc61b004a1bdb2af (patch) | |
| tree | a892cc5bed0f49ce1ebc96c7da2fcd2a0e373170 /src/core | |
| parent | 51cd83bf0dcf2e147d7b14e755a96133eaa9c767 (diff) | |
It's going to be a considerable change...
Diffstat (limited to 'src/core')
7 files changed, 66 insertions, 100 deletions
| diff --git a/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/Compiler.java b/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/Compiler.java index 4dc56d6..9dca78b 100644 --- a/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/Compiler.java +++ b/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/Compiler.java @@ -34,7 +34,7 @@ public class Compiler        compiler.assembler().handle_adding_instruction        ( -         compiler.assembler().merge(compiler.registers().pop_initializes()), +         compiler.assembler().merge(compiler.registers().get_initialization()),           wyrd_world        ); 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 16f7ec0..16c5eae 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 @@ -120,12 +120,6 @@ public class SequenceCompiler        compiler.assembler().handle_adding_instruction        ( -         compiler.assembler().merge(compiler.registers().pop_initializes()), -         compiler.world() -      ); - -      compiler.assembler().handle_adding_instruction -      (           compiler.assembler().mark_after           (              compiler.assembler().merge(init_instructions), 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 24ec2eb..e335374 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 @@ -15,6 +15,7 @@ import tonkadur.wyrd.v1.lang.Register;  import tonkadur.wyrd.v1.lang.type.Type;  import tonkadur.wyrd.v1.lang.instruction.Initialize; +import tonkadur.wyrd.v1.lang.instruction.Remove;  class RegisterContext  { @@ -78,13 +79,17 @@ class RegisterContext           {              r.activate(t); +            initialize_holder.add(new Initialize(r.get_address(), t)); +              return r;           }        }        name = (name_prefix + Integer.toString(generated_registers++)); -      result = create_register(t, name, initialize_holder); +      result = create_register(t, name); + +      initialize_holder.add(new Initialize(result.get_address(), t));        anonymous_registers.add(result); @@ -102,7 +107,7 @@ class RegisterContext     {        final Register result; -      result = create_register(t, name, initialize_holder); +      result = create_register(t, name);        if (register_by_name.get(name) != null)        { @@ -114,6 +119,8 @@ class RegisterContext           );        } +      initialize_holder.add(new Initialize(result.get_address(), t)); +        register_by_name.put(name, result);        return result; @@ -141,9 +148,9 @@ class RegisterContext        }     } -   public void unbind (final String name) +   public void unbind (final String name, final List<Instruction> instr_holder)     { -      release(aliased_registers.get(name)); +      release(aliased_registers.get(name), instr_holder);        aliased_registers.remove(name); @@ -158,11 +165,14 @@ class RegisterContext        hierarchical_aliases.push(new ArrayList<String>());     } -   public void pop_hierarchical_instruction_level () +   public void pop_hierarchical_instruction_level +   ( +      final List<Instruction> instr_holder +   )     {        for (final String s: hierarchical_aliases.pop())        { -         unbind(s); +         unbind(s, instr_holder);        }     } @@ -185,25 +195,19 @@ class RegisterContext        return register_by_name.get(name);     } -   public void release (final Register r) +   public void release (final Register r, final List<Instruction> instr_holder)     { +      instr_holder.add(new Remove(r.get_address()));        r.deactivate();     } -   protected Register create_register -   ( -      final Type t, -      final String name, -      final List<Instruction> initialize_holder -   ) +   protected Register create_register (final Type t, final String name)     {        final Register result;        result = new Register(name);        result.activate(t); -      initialize_holder.add(new Initialize(result.get_address(), t)); -        return result;     } 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 da5b063..9593eaf 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 @@ -40,7 +40,7 @@ public class RegisterManager     protected final RegisterContext base_context, parameter_context;     protected final Register next_pc, pc_stack;     protected final Register choice_number, rand_mode, rand_value; -   protected List<Instruction> awaiting_inits; +   protected final List<Instruction> awaiting_inits;     protected int created_contexts;     public RegisterManager () @@ -64,14 +64,14 @@ public class RegisterManager        context.push(base_context);     } -   public Register reserve (final Type t) +   public Register reserve (final Type t, final List<Instruction> instr_holder)     { -      return context.peekFirst().reserve(t, awaiting_inits); +      return context.peekFirst().reserve(t, instr_holder);     } -   public void release (final Register r) +   public void release (final Register r, final List<Instruction> instr_holder)     { -      context.peekFirst().release(r); +      context.peekFirst().release(r, instr_holder);     }     public String create_stackable_context_name () @@ -94,7 +94,11 @@ public class RegisterManager        return rand_value;     } -   public void create_stackable_context (final String context_name) +   public void create_stackable_context +   ( +      final String context_name, +      final List<Instruction> instr_holder +   )     {        final StackableRegisterContext result; @@ -103,7 +107,7 @@ public class RegisterManager           (              base_context,              context_name, -            awaiting_inits +            instr_holder           );        if (context_by_name.containsKey(context_name)) @@ -138,9 +142,14 @@ public class RegisterManager        context.pop();     } -   public Register register (final Type t, final String name) +   public Register register +   ( +      final Type t, +      final String name, +      final List<Instruction> instr_holder +   )     { -      return context.peekFirst().reserve(t, name, awaiting_inits); +      return context.peekFirst().reserve(t, name, instr_holder);     }     public void bind (final String name, final Register register) @@ -148,9 +157,9 @@ public class RegisterManager        context.peekFirst().bind(name, register);     } -   public void unbind (final String name) +   public void unbind (final String name, final List<Instruction> instr_holder)     { -      context.peekFirst().unbind(name); +      context.peekFirst().unbind(name, instr_holder);     }     public Register get_context_register (final String name) @@ -289,23 +298,12 @@ public class RegisterManager        context.peekFirst().push_hierarchical_instruction_level();     } -   public void pop_hierarchical_instruction_level () -   { -      context.peekFirst().pop_hierarchical_instruction_level(); -   } - -   public Collection<DictType> get_context_structure_types () +   public void pop_hierarchical_instruction_level +   ( +      final List<Instruction> instr_holder +   )     { -      final Collection<DictType> result; - -      result = new ArrayList<DictType>(); - -      for (final StackableRegisterContext src: context_by_name.values()) -      { -         result.add(src.get_structure_type()); -      } - -      return result; +      context.peekFirst().pop_hierarchical_instruction_level(instr_holder);     }     public Collection<Register> get_base_registers () @@ -325,7 +323,7 @@ public class RegisterManager        {           final Register r; -         r = parameter_context.reserve(p.get_type(), awaiting_inits); +         r = parameter_context.reserve(p.get_type(), result);           result.add(new SetValue(r.get_address(), p)); @@ -336,6 +334,8 @@ public class RegisterManager        {           /* Side-channel attack to pass parameters, because it's convenient. */           r.deactivate(); +         // Do not use the context to deactivate here, otherwise the value will +         // be removed.        }        return result; @@ -345,15 +345,17 @@ public class RegisterManager     {        final List<Register> used_registers;        final List<Instruction> result; +      final List<Instruction> ignored_inits;        used_registers = new ArrayList<Register>();        result = new ArrayList<Instruction>(); +      ignored_inits = new ArrayList<Instruction>();        for (final Register p: params)        {           final Register r; -         r = parameter_context.reserve(p.get_type(), awaiting_inits); +         r = parameter_context.reserve(p.get_type(), ignored_inits);           result.add(new SetValue(p.get_address(), r.get_value())); @@ -363,20 +365,14 @@ public class RegisterManager        for (final Register r: used_registers)        {           /* Side-channel attack to pass parameters, because it's convenient. */ -         r.deactivate(); +         parameter_context.release(r, result);        }        return result;     } -   public List<Instruction> pop_initializes () +   public List<Instruction> get_initialization ()     { -      final List<Instruction> result; - -      result = awaiting_inits; - -      awaiting_inits = new ArrayList<Instruction>(); - -      return result; +      return awaiting_inits;     }  } 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 5f38107..0ceaa4f 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 @@ -1,7 +1,5 @@  package tonkadur.wyrd.v1.compiler.util.registers; -import java.util.Map; -import java.util.HashMap;  import java.util.Collection;  import java.util.List;  import java.util.ArrayList; @@ -28,14 +26,11 @@ import tonkadur.wyrd.v1.lang.instruction.Initialize;  import tonkadur.wyrd.v1.lang.type.Type;  import tonkadur.wyrd.v1.lang.type.PointerType;  import tonkadur.wyrd.v1.lang.type.MapType; -import tonkadur.wyrd.v1.lang.type.DictType;  class StackableRegisterContext extends RegisterContext  { -   protected final Map<String, Type> context_structure_fields;     protected final RegisterContext base_context; -   protected final DictType context_structure;     protected final Register context_stack_level;     protected final Register context_stacks;     protected final Address current_context_address_holder; @@ -52,15 +47,11 @@ class StackableRegisterContext extends RegisterContext        this.base_context = base_context; -      context_structure_fields = new HashMap<String, Type>(); - -      context_structure = new DictType(context_name, context_structure_fields); -        context_stack_level = base_context.reserve(Type.INT, initialize_holder);        context_stacks =           base_context.reserve           ( -            new MapType(new PointerType(context_structure)), +            new MapType(new PointerType(MapType.MAP_TO_ANY)),              initialize_holder           ); @@ -69,45 +60,27 @@ class StackableRegisterContext extends RegisterContext           (              context_stacks.get_address(),              new Cast(context_stack_level.get_value(), Type.STRING), -            new PointerType(context_structure) +            new PointerType(MapType.MAP_TO_ANY)           );        current_context_address =              new Address              (                 new ValueOf(current_context_address_holder), -               context_structure +               MapType.MAP_TO_ANY              );     }     @Override -   protected Register create_register -   ( -      final Type t, -      final String name, -      final List<Instruction> initialize_holder -   ) +   protected Register create_register (final Type t, final String name)     {        final Register result; -      if (context_structure.get_fields().get(name) != null) -      { -         System.err.println -         ( -            "[P] Duplicate register '" -            + name -            + "' in stackable context " -            + this.name -            + "." -         ); -      } - -      context_structure.get_fields().put(name, Type.INT); -        result = new Register(current_context_address, name); +        result.activate(t); -      /* No need for this: it's part of the type. */ +      /* Handled elsewhere */        //initialize_holder.add(new Initialize(result.get_address(), t));        return result; @@ -133,7 +106,7 @@ class StackableRegisterContext extends RegisterContext           new Initialize           (              current_context_address_holder, -            new PointerType(context_structure) +            new PointerType(MapType.MAP_TO_ANY)           )        ); @@ -142,7 +115,7 @@ class StackableRegisterContext extends RegisterContext           new SetValue           (              current_context_address_holder, -            new New(context_structure) +            new New(MapType.MAP_TO_ANY)           )        ); @@ -170,9 +143,4 @@ class StackableRegisterContext extends RegisterContext        return result;     } - -   public DictType get_structure_type () -   { -      return context_structure; -   }  } diff --git a/src/core/src/tonkadur/wyrd/v1/lang/type/MapType.java b/src/core/src/tonkadur/wyrd/v1/lang/type/MapType.java index c9586ee..7773fac 100644 --- a/src/core/src/tonkadur/wyrd/v1/lang/type/MapType.java +++ b/src/core/src/tonkadur/wyrd/v1/lang/type/MapType.java @@ -7,6 +7,7 @@ public class MapType extends Type     public static final MapType MAP_TO_INT;     public static final MapType MAP_TO_STRING;     public static final MapType MAP_TO_RICH_TEXT; +   public static final MapType MAP_TO_ANY;     static     { @@ -15,6 +16,7 @@ public class MapType extends Type        MAP_TO_INT = new MapType(Type.INT);        MAP_TO_RICH_TEXT = new MapType(Type.RICH_TEXT);        MAP_TO_STRING = new MapType(Type.STRING); +      MAP_TO_ANY = new MapType(Type.ANY);     }     /***************************************************************************/ diff --git a/src/core/src/tonkadur/wyrd/v1/lang/type/Type.java b/src/core/src/tonkadur/wyrd/v1/lang/type/Type.java index d123104..6f87094 100644 --- a/src/core/src/tonkadur/wyrd/v1/lang/type/Type.java +++ b/src/core/src/tonkadur/wyrd/v1/lang/type/Type.java @@ -7,6 +7,7 @@ public class Type     public static final Type INT;     public static final Type RICH_TEXT;     public static final Type STRING; +   public static final Type ANY;     static     { @@ -15,6 +16,7 @@ public class Type        INT = new Type("int");        RICH_TEXT = new Type("rich_text");        STRING = new Type("string"); +      ANY = new Type("any");     }     /***************************************************************************/ | 


