Browse Source

+ added amfrtDeleteAi, support deleting instructions in map_structured_asmlist_inner

Nikolay Nikolov 1 year ago
parent
commit
9584348c40
1 changed files with 14 additions and 1 deletions
  1. 14 1
      compiler/wasm32/aasmcpu.pas

+ 14 - 1
compiler/wasm32/aasmcpu.pas

@@ -42,12 +42,13 @@ uses
 
 
     type
     type
       twasmstruc_stack = class;
       twasmstruc_stack = class;
-      TAsmMapFuncResultType = (amfrtNoChange, amfrtNewAi, amfrtNewList);
+      TAsmMapFuncResultType = (amfrtNoChange, amfrtNewAi, amfrtNewList, amfrtDeleteAi);
       TAsmMapFuncResult = record
       TAsmMapFuncResult = record
         case typ: TAsmMapFuncResultType of
         case typ: TAsmMapFuncResultType of
           amfrtNoChange: ();
           amfrtNoChange: ();
           amfrtNewAi: (newai: tai);
           amfrtNewAi: (newai: tai);
           amfrtNewList: (newlist: TAsmList);
           amfrtNewList: (newlist: TAsmList);
+          amfrtDeleteAi: ();
       end;
       end;
       TAsmMapFunc = function(ai: tai; blockstack: twasmstruc_stack): TAsmMapFuncResult of object;
       TAsmMapFunc = function(ai: tai; blockstack: twasmstruc_stack): TAsmMapFuncResult of object;
       TWasmLocalAllocator = function(wbt: TWasmBasicType): Integer of object;
       TWasmLocalAllocator = function(wbt: TWasmBasicType): Integer of object;
@@ -2890,6 +2891,12 @@ uses
                       l.Remove(p);
                       l.Remove(p);
                       p:=q;
                       p:=q;
                     end;
                     end;
+                  amfrtDeleteAi:
+                    begin
+                      q:=p;
+                      p:=tai(p.next);
+                      l.Remove(q);
+                    end;
                 end;
                 end;
               end
               end
             else
             else
@@ -2918,6 +2925,12 @@ uses
                       l.Remove(p);
                       l.Remove(p);
                       p:=q;
                       p:=q;
                     end;
                     end;
+                  amfrtDeleteAi:
+                    begin
+                      q:=p;
+                      p:=tai(p.next);
+                      l.Remove(q);
+                    end;
                 end;
                 end;
               end;
               end;
           end;
           end;