مترجم (حاجز الاستضافة ٣/F2-ج): تمرير/إرجاع بنية @تمثيل_سي بالقيمة عبر الربط الخارجيّ (RFC #53 F2-ج)#286
Merged
Merged
Conversation
… الربط الخارجيّ (RFC #53 F2-ج) يُكمل هذا الحاجزَ الثالثَ (FFI بنيويّ) بمراحله الثلاث: بنيةُ @تمثيل_سي في توقيع «دالة خارجية» تُمرَّر/تُرجَع بالقيمة ضمنًا (قرار المالك)، بتصنيف ABI مطابقٍ لـClang لهدفَي System V AMD64 و Windows x64. التنفيذ (٨ ملفّات): - SIRFunction.isExtern + returnClassName ⇐ FunctionDecl. - مصنِّف ABI classifyCReprAbi: Win64 حجم∈{1,2,4,8}⇒سجلّ iN وإلّا byval؛ SysV >16⇒byval وإلّا 1-2 ثمانيّات (عشريّة⇒double وإلّا iN)؛ العائد ≤حدّ⇒مباشر (RAX[:RDX]) وإلّا sret. - emitFunctionPrototype: يحسب CReprCallPlan مرّةً (تصاريح-أوّلًا) ويطبّق byval/sret على التصريح، ويخزّنه في creprCallPlans. - موقع النداء (emitCall): يحمّل قطع البنية من ذاكرة الكائن، يخصّص sret، يجسّد العائد، ويطبّق byval/sret على النداء. - إصلاح المحلّل parseExternFunctionDecl: كان يقبل نوع العائد المبنيّ فقط لا اسمَ صنفٍ مُعرَّف ⇒ أُضيف إرشاد الرمزين المتتاليين. البرهان: IR مطابقٌ لـClang للهدفين؛ ربطٌ وتشغيلٌ حيٌّ Win64 (ص تنادي دوالّ C تمرّر/تُرجِع Small 8ب + Point 16ب بالقيمة) ⇒ 107/42/42/42. انحدار صفريّ (rules_matrix 2459/2460، الفشل الوحيد b2_recursion_accumulator سابق). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
📚 تذكير مزامنة دليل المطوّرين هذا الـPR يلمس مصادر موثَّقة في دليل المطوّرين. راجع الفصول الآتية وحدّثها إن تغيّر سلوكها، ثم ثبّت البصمات هناك (
بندٌ في معيار الإنجاز. تذكيرٌ آليّ — لا يحجب الدمج. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
الهدف
إكمال F2-ج — المرحلة الأخيرة من الحاجز الثالث (FFI بنيويّ) في حملة الاستضافة الذاتيّة (RFC #52): تمرير/إرجاع بنية
@تمثيل_سيبالقيمة عبر الربط الخارجيّ، بتصنيف ABI مطابقٍ لـClang لهدفَي System V AMD64 و Windows x64. بذا يكتمل الحاجز الثالث بمراحله الثلاث (F2-أ #277 + F2-ب #280 + F2-ج هذا).قرار المالك: بنية
@تمثيل_سيفي توقيعدالة خارجية= بالقيمة ضمنًا؛ التمرير بالمؤشّر يبقى صريحًا عبررقم(كالاستعمال القائمmemset/clock_gettime) ⇒ إضافة غير كاسرة.التنفيذ (٨ ملفّات، +488 سطر)
SIRFunction.isExtern + returnClassNameيُنقَلان منFunctionDecl(sir_module.h، sir_builder_functions.cpp).classifyCReprAbi(classes_vtables_ops.cpp): Win64 حجم∈{1,2,4,8}⇒سجلّiNوإلّاbyval؛ SysV >16⇒byvalوإلّا 1-2 «ثمانيّات» (كلّها عشريّة⇒doubleفي XMM، وإلّاiNفي GPR)؛ العائد ≤حدّ⇒مباشر (RAX[:RDX]) وإلّاsret.emitFunctionPrototype(functions2_ops.cpp): يحسبCReprCallPlanمرّةً (تصاريح-أوّلًا مضمونة)، يطبّقbyval/sretعلى التصريح، ويخزّن الخطّة فيcreprCallPlans.emitCall(cf_branch_call.cpp): يقرأ الخطّة، يحمّل قطع البنية من ذاكرة الكائن، يخصّص عائدsret، يجسّد العائد المباشر، ويطبّقbyval/sretعلى النداء.parseExternFunctionDeclكان يقبل نوع العائد المبنيّ فقط لا اسمَ صنفٍ مُعرَّف ⇒ أُضيف إرشاد الرمزين المتتاليين (مطابقًا للدالّة العاديّة) + حفظreturnTypeName.البرهان
declare i64 @small_sum(i64)·@make_small()→i64·@point_sum(ptr byval(...))·void @make_point(ptr sret(...))@point_sum(i64, i64)·{ i64, i64 } @make_point()@تمثيل_سيبالقيمة (Small 8ب سجلّ + Point 16بbyval/sret) ⇒ الخرج107 / 42 / 42 / 42صحيحٌ طرفًا لطرف.الانحدار والمراجعة
b2_recursion_accumulatorسابقٌ حتميّ (تعاود مفسّر، غير متعلّق بالـFFI). انحدار صفريّ.رقم⇔int64_t، لا بنى متداخلة، وبنيةٌ غير-@تمثيل_سيبالقيمة تنحطّ صامتةً لمؤشّر = قرار دلاليّ للمالك، غير كاسر).مرتبط: RFC sadlang/rfcs#53 (محدَّث بتوثيق F2-ج).
🤖 Generated with Claude Code