瀏覽代碼

+ override the 'on' node for WebAssembly

Nikolay Nikolov 3 年之前
父節點
當前提交
0e647a073e
共有 1 個文件被更改,包括 48 次插入2 次删除
  1. 48 2
      compiler/wasm32/nwasmflw.pas

+ 48 - 2
compiler/wasm32/nwasmflw.pas

@@ -81,6 +81,17 @@ interface
         procedure pass_generate_code;override;
       end;
 
+      { twasmonnode }
+
+      twasmonnode = class(tcgonnode)
+      private
+        procedure pass_generate_code_no_exceptions;
+        procedure pass_generate_code_js_exceptions;
+        procedure pass_generate_code_native_exceptions;
+      public
+        procedure pass_generate_code;override;
+      end;
+
 implementation
 
     uses
@@ -402,8 +413,8 @@ implementation
 
         flowcontrol:=[fc_inflowcontrol]+trystate.oldflowcontrol*[fc_catching_exceptions];
         { on statements }
-        //if assigned(right) then
-        //  secondpass(right);
+        if assigned(right) then
+          secondpass(right);
 
         afteronflowcontrol:=flowcontrol;
 
@@ -897,10 +908,45 @@ implementation
           internalerror(2021091704);
       end;
 
+{*****************************************************************************
+                                  twasmonnode
+*****************************************************************************}
+
+    procedure twasmonnode.pass_generate_code_no_exceptions;
+      begin
+        { should not be called }
+        internalerror(2021092803);
+      end;
+
+    procedure twasmonnode.pass_generate_code_js_exceptions;
+      begin
+        { not yet implemented }
+        internalerror(2021092804);
+      end;
+
+    procedure twasmonnode.pass_generate_code_native_exceptions;
+      begin
+        location_reset(location,LOC_VOID,OS_NO);
+        { todo: implement }
+      end;
+
+    procedure twasmonnode.pass_generate_code;
+      begin
+        if ts_wasm_no_exceptions in current_settings.targetswitches then
+          pass_generate_code_no_exceptions
+        else if ts_wasm_js_exceptions in current_settings.targetswitches then
+          pass_generate_code_js_exceptions
+        else if ts_wasm_native_exceptions in current_settings.targetswitches then
+          pass_generate_code_native_exceptions
+        else
+          internalerror(2021092802);
+      end;
+
 initialization
   cifnode:=twasmifnode;
   cwhilerepeatnode:=twasmwhilerepeatnode;
   craisenode:=twasmraisenode;
   ctryexceptnode:=twasmtryexceptnode;
   ctryfinallynode:=twasmtryfinallynode;
+  connode:=twasmonnode;
 end.