瀏覽代碼

* fixed crash in twasmcallnode.pass_typecheck when there is no procdefinition (for generic methods)

Nikolay Nikolov 2 年之前
父節點
當前提交
e6cbdba0bd
共有 1 個文件被更改,包括 13 次插入10 次删除
  1. 13 10
      compiler/wasm32/nwasmcal.pas

+ 13 - 10
compiler/wasm32/nwasmcal.pas

@@ -64,17 +64,20 @@ implementation
         if codegenerror then
           exit;
 
-        p:=tcallparanode(left);
-        paranr:=0;
-        while assigned(p) do
+        if assigned(procdefinition) then
           begin
-            pvs:=tparavarsym(procdefinition.paras[paranr]);
-            if assigned(p.left) and is_wasm_reference_type(p.left.resultdef) and
-              ((pvs.varspez in [vs_var,vs_constref,vs_out]) or
-               ((pvs.varspez=vs_const) and (pvs.vardef.typ=formaldef))) then
-              CGMessage(parser_e_wasm_ref_types_can_only_be_passed_by_value);
-            Inc(paranr);
-            p:=tcallparanode(tcallparanode(p).right);
+            p:=tcallparanode(left);
+            paranr:=0;
+            while assigned(p) do
+              begin
+                pvs:=tparavarsym(procdefinition.paras[paranr]);
+                if assigned(p.left) and is_wasm_reference_type(p.left.resultdef) and
+                  ((pvs.varspez in [vs_var,vs_constref,vs_out]) or
+                   ((pvs.varspez=vs_const) and (pvs.vardef.typ=formaldef))) then
+                  CGMessage(parser_e_wasm_ref_types_can_only_be_passed_by_value);
+                Inc(paranr);
+                p:=tcallparanode(tcallparanode(p).right);
+              end;
           end;
       end;