Assemblyscript: خطأ في التجميع عند محاولة استخدام call_indirect

تم إنشاؤها على ١٩ ديسمبر ٢٠١٩  ·  4تعليقات  ·  مصدر: AssemblyScript/assemblyscript

على الرغم من أنه موصوف في index.d.ts فإن استخدامه ينتج خطأ " ERROR TS2304: Cannot find name 'call_indirect' " أثناء الترجمة. الشيء نفسه ينطبق على call_direct .

التعليق الأكثر فائدة

نعم ، لقد تمت إزالتها بسبب المشكلات المتوقعة في تنفيذ الإغلاق. لكن لا يزال بإمكان المرء القيام بذلك:

changetype<(a: i32, b: i32) => i32>(someTableIndex)(1, 2);

على التوالى

var tableIndex = changetype<usize>(someFunction);

ال 4 كومينتر

يبدو أنه تمت إزالتهما هنا - https://github.com/AssemblyScript/assemblyscript/pull/974. هل هناك / هل سيكون هناك بدائل؟ في حالتي ، أحتاج إلى ربط رد اتصال مقدم من جانب JS بفئة wasm. كانت خطتي هي تمرير جدول إلى وحدة wasm (باستخدام علامة --importTable ) ثم تسميتها باستخدام شيء مثل call_indirect( this.callbackId )

بعد بعض الاعتبارات توصلت إلى حلين محتملين:
1) احتفظ بجدول رد الاتصال في JS (فقط مجموعة من عمليات الاسترجاعات) وقم بتوفير طريقة invokeCallback(callbackId: i32): void لوحدة wasm.
2) قم بإضافة خيار --tableBase للمترجم ، حتى يتمكن المستخدم من حجز بعض المساحة في الجدول خصيصًا لعمليات الاسترجاعات. قد تنجح ، ولكن من المحتمل أن تعقد الأمور على جانب المترجم.

على أي حال ، لا تتردد في إغلاق هذه المسألة. الشيء الوحيد هو أنه يجب إزالة call_indirect و call_direct من index.d.ts إذا لم تتم إضافتهم مرة أخرى إلى الميزة

نعم ، لقد تمت إزالتها بسبب المشكلات المتوقعة في تنفيذ الإغلاق. لكن لا يزال بإمكان المرء القيام بذلك:

changetype<(a: i32, b: i32) => i32>(someTableIndex)(1, 2);

على التوالى

var tableIndex = changetype<usize>(someFunction);

ثابت في # 1017

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات

القضايا ذات الصلة

emil14 picture emil14  ·  3تعليقات

blooddy picture blooddy  ·  3تعليقات

DuncanUszkay1 picture DuncanUszkay1  ·  3تعليقات

MaxGraey picture MaxGraey  ·  3تعليقات

dcodeIO picture dcodeIO  ·  4تعليقات