Browse Source

* match the label to the wider block, if it is adjacent to both the brevious
and the next instruction

Nikolay Nikolov 3 years ago
parent
commit
4e3a6aa5a8
1 changed files with 10 additions and 17 deletions
  1. 10 17
      compiler/wasm32/cpupi.pas

+ 10 - 17
compiler/wasm32/cpupi.pas

@@ -440,23 +440,16 @@ implementation
                   begin
                     lbl:=tai_label(hp);
                     lbl.labsym.nestingdepth:=-1;
-                    { first, try to match label to the previous instruction }
-                    if assigned(lastinstr) then
-                      begin
-                        if lastinstr.opcode=a_loop then
-                          lbl.labsym.nestingdepth:=cur_nesting_depth
-                        else if lastinstr.opcode in [a_end_block,a_end_try,a_end_if] then
-                          lbl.labsym.nestingdepth:=cur_nesting_depth+1;
-                      end;
-                    { if not matched, try to match it to the next instruction }
-                    if lbl.labsym.nestingdepth=-1 then
-                      begin
-                        nextinstr:=FindNextInstruction(hp);
-                        if nextinstr.opcode=a_loop then
-                          lbl.labsym.nestingdepth:=cur_nesting_depth+1
-                        else if nextinstr.opcode in [a_end_block,a_end_try,a_end_if] then
-                          lbl.labsym.nestingdepth:=cur_nesting_depth;
-                      end;
+                    nextinstr:=FindNextInstruction(hp);
+
+                    if assigned(nextinstr) and (nextinstr.opcode in [a_end_block,a_end_try,a_end_if]) then
+                      lbl.labsym.nestingdepth:=cur_nesting_depth
+                    else if assigned(lastinstr) and (lastinstr.opcode=a_loop) then
+                      lbl.labsym.nestingdepth:=cur_nesting_depth
+                    else if assigned(lastinstr) and (lastinstr.opcode in [a_end_block,a_end_try,a_end_if]) then
+                      lbl.labsym.nestingdepth:=cur_nesting_depth+1
+                    else if assigned(nextinstr) and (nextinstr.opcode=a_loop) then
+                      lbl.labsym.nestingdepth:=cur_nesting_depth+1;
                   end;
                 else
                   ;