| summaryrefslogtreecommitdiff | 
diff options
| author | Nathanael Sensfelder <SpamShield0@MultiAgentSystems.org> | 2021-12-27 22:32:32 +0100 | 
|---|---|---|
| committer | Nathanael Sensfelder <SpamShield0@MultiAgentSystems.org> | 2021-12-27 22:32:32 +0100 | 
| commit | 18ebe6e6ca4299b7f903426502c5a5fb73747c81 (patch) | |
| tree | 7a310a4c8330b04c0d61a69e11650452896851eb /src/Tonkadur/Execute.elm | |
| parent | 7c727df4fb7e15e396959f59048f22bb346aef13 (diff) | |
...
Diffstat (limited to 'src/Tonkadur/Execute.elm')
| -rw-r--r-- | src/Tonkadur/Execute.elm | 96 | 
1 files changed, 69 insertions, 27 deletions
| diff --git a/src/Tonkadur/Execute.elm b/src/Tonkadur/Execute.elm index cf582dd..cf88968 100644 --- a/src/Tonkadur/Execute.elm +++ b/src/Tonkadur/Execute.elm @@ -89,23 +89,51 @@ initialize : (        Tonkadur.Types.State     )  initialize type_name address state = -   {state | -      memory = -         (Tonkadur.Types.apply_at_address -            (Tonkadur.Types.value_to_list -               (Tonkadur.Compute.compute state address) -            ) -            (\last_addr dict -> -               (Dict.insert -                  last_addr -                  (Tonkadur.Types.get_default state type_name) -                  dict +   let +      new_state = +         {state | +            memory = +               (Tonkadur.Types.apply_at_address +                  (Tonkadur.Types.value_to_list +                     (Tonkadur.Compute.compute state address) +                  ) +                  (\last_addr dict -> +                     (Dict.insert +                        last_addr +                        (Tonkadur.Types.get_default state type_name) +                        dict +                     ) +                  ) +                  state.memory                 ) -            ) -            state.memory -         ) -      -- TODO: detect allocated memory for special handling. -   } +            -- TODO: detect allocated memory for special handling. +         } +   in +      case address of +         [single_element] -> +            if (String.startsWith ".alloc." single_element) +            then +               if +               ( +                  single_element +                  == (".alloc." ++ (String.fromInt new_state.allocated_data)) +               ) +               then +                  {new_state | +                     allocated_data = new_state.allocated_data + 1 +                  } +               else +                  {new_state | +                     freed_addresses = +                        (List.filter +                           (\addr -> (addr /= single_element)) +                           new_state.freed_addresses +                        ) +                  } + +            else new_state + +         _ -> new_state  prompt_command : (        Tonkadur.Types.PromptInstructionData -> @@ -161,17 +189,31 @@ remove : (        Tonkadur.Types.State     )  remove address state = -   {state | -      memory = -         (Tonkadur.Types.apply_at_address -            (Tonkadur.Types.value_to_list -               (Tonkadur.Compute.compute state address) -            ) -            (\last_addr dict -> (Dict.remove last_addr dict)) -            state.memory -         ) -      -- TODO: detect allocated memory for special handling. -   } +   let +      new_state = +         {state | +            memory = +               (Tonkadur.Types.apply_at_address +                  (Tonkadur.Types.value_to_list +                     (Tonkadur.Compute.compute state address) +                  ) +                  (\last_addr dict -> (Dict.remove last_addr dict)) +                  state.memory +               ) +         } +   in +      case address of +         [single_element] -> +            if (String.startsWith ".alloc." single_element) +            then +               {new_state | +                  freed_addresses = +                     (single_element :: new_state.freed_addresses) +               } +            else new_state + +         _ -> new_state +  resolve_choice : Tonkadur.Types.State -> Tonkadur.Types.State  resolve_choice state = | 


