Skip to content

نظام الوحدات (حاجز الاستضافة ٤): انتشار أنواع المعاملات عبر الوحدات + «صدّر بنية» عبر الوحدات (ISSUE-026)#276

Open
SalehKadah wants to merge 2 commits into
devfrom
fix/module-type-propagation
Open

نظام الوحدات (حاجز الاستضافة ٤): انتشار أنواع المعاملات عبر الوحدات + «صدّر بنية» عبر الوحدات (ISSUE-026)#276
SalehKadah wants to merge 2 commits into
devfrom
fix/module-type-propagation

Conversation

@SalehKadah

@SalehKadah SalehKadah commented Jul 25, 2026

Copy link
Copy Markdown
Collaborator

تقوية نظام الوحدات ضمن حملة الاستضافة الذاتيّة (RFC #52، الحاجز ٤). إيداعان:


① انتشار أنواع المعاملات غير المصرَّحة عبر حدود الوحدات (متعدٍّ) — 0c2a67bc

العلّة: الدوالّ المستوردة تُبنى في الطور ٢ بعد استنتاج ١.٧ فلا تكون في functionTable_ ⇒ معامل نصّيّ غير مصرَّح يُطبَع مشوَّهًا عبر الحدّ (مرحبا 140698...).
الإصلاح: preRegisterImportedSignatures يسجّل تواقيع الرموز المُصدَّرة المطلوبة فقط قبل ١.٧ ويجمع أشجار الوحدات (متعدّيًا) في importedModuleBodies_؛ inferParamTypesFromCallSites يمسحها في تمريراته الثلاث ⇒ انتشار متعدٍّ (رسالة⇒تحية).
حواسم أميليا ×٢: حصر التسجيل بالمُصدَّر المطلوب (لا اختطاف مدمَج طول/حجم/جذر) · preRegisteredImportNames_ يميّز البذرة عن المحلّيّ · 🔑path::string() على اسمٍ عربيّ يتعطّل على ويندوز ⇒ from_wstring(wstring).
اختباران: 060_transitive_param_type_inference (16/8/مرحبا زيد!) · 061_import_does_not_hijack_builtin (5/14).


② «صدّر بنية» تُترجَم عبر الوحدات (ISSUE-026 مُغلَق) — 7e889137

العلّة: StructDecl عقدة متمايزة عن ClassDecl؛ معالِجا الاستيراد يلتقطان Function/Var/ClassDecl فقط ويُسقطان StructDecl ⇒ البنية المستوردة لا تُسجَّل ⇒ نقطة() يفشل «دالة غير معرّفة».
الإصلاح: التقاط StructDecl في الفروع الثلاثة بكلا المعالِجين + بناؤه بـbuildStatement (⇒ addClass/classTable_ كالوحدة الرئيسة في 2A-0/ISSUE-051) مع حارس getClass.
اختبار مزدوج: 062_import_exported_struct (استيراد نقطة+نقطة()+وصول حقل = 3/4/7). رفعُ قيد ISSUE-026 من SoT (20_declarations/30_oop) والتقارير. مراجعة أميليا: لا عيب حرِج.


التحقّق العامّ

  • قسم الاستيراد المزدوج (مفسّر+مترجم) أخضر (٣ اختبارات جديدة + ٤ تجهيزات مُتخطّاة).
  • البوّابة الكاملة 95.6%136 فشلًا = الأساس تمامًا بنفس الاختبارات الفاشلة، بلا انحدار (كلّها فجوات @gap/FAIL_INTERP/شبكة-واجهة سابقة).

ديون معروفة (سابقة، لم يُدخِلها هذا الـPR)

  • حقلٌ من نوع بنية (بنية متداخلة) ينهار إلى Integer في statement_types.cpp (خارطة الأنواع بلا حالة Struct + StructField بلا اسم نوع) ⇒ البنى المتداخلة عبر الوحدات فجوةٌ مستقلّة (اختبار 001_struct_field_nested، فاشل في الأساس). اختبار ② يستعمل حقولًا قياسيّة.
  • سياق أنواع الرئيسة عند مسح الوحدات الأجنبيّة · الخريطة الساكنة s_numSeen (تسريب LSP).
  • قرارٌ لغويّ للمالك: هل يُسمح استيراد رمزٍ غير مُصدَّر؟ (لا يُستنتَج نوعه، كأساس origin/dev).

🤖 Generated with Claude Code

SalehKadah and others added 2 commits July 25, 2026 04:55
… — تقوية نظام الوحدات (حاجز الاستضافة ٤)

العلّة: الدوالّ المستوردة تُبنى في الطور ٢ بعد طور الاستنتاج ١.٧، فلا تكون في
functionTable_ حين يمسح inferParamTypesFromCallSites مواقع النداء ⇒ نوع المعامل
غير المصرَّح يبقى Integer الافتراضيّ ⇒ الوسيط النصّيّ يُطبع مشوَّهًا عبر حدّ الوحدة
(`مرحبا 140698...`).

الإصلاح: preRegisterImportedSignatures يسجّل تواقيع الدوالّ المستوردة (المُصدَّرة
المطلوبة فقط) في functionTable_ قبل الطور ١.٧، ويجمع أشجار الوحدات (متعدّيًا، بحارس
دائريّة) كي يمسحها الاستنتاج أيضًا ⇒ ينتشر النوع عبر حدود الوحدات (رسالة⇒تحية) كما
داخل وحدةٍ واحدة. الطور ٢ يبنيها بالنوع المصحَّح (حارس تخطٍّ يميّز البذرة عن المحلّيّ).

الحواسم (مراجعتا أميليا):
- حصر التسجيل بالرموز المُصدَّرة المطلوبة (لا كلّ دوالّ الوحدة) ⇒ لا تختطف دالّةٌ
  خاصّة باسم مدمَج (طول/حجم/جذر) المدمَجَ في الرئيسة.
- مجموعة preRegisteredImportNames_ ⇒ حارس التخطّي يبني البذرة غير المبنيّة فقط،
  ويُبقي المحلّيّ فائزًا (لا بناء مزدوج).
- 🔑 مفتاح الزيارة بـfrom_wstring(wstring) على ويندوز: path::string() على اسمٍ
  عربيّ يتعطّل (خارج ANSI) — يطابق ما يفعله module_resolver عمدًا.

تحقّق: قسم الاستيراد المزدوج (مفسّر+مترجم) أخضر + اختباران جديدان (متعدٍّ ٣ مستويات
+ عدم اختطاف المدمَج). البوّابة الكاملة 95.7% بلا انحدار.

دَينان سابقان (لم يُدخِلهما هذا التغيير): سياق الأنواع عند مسح الوحدات الأجنبيّة،
والخريطة الساكنة s_numSeen (تسريب LSP). وقرارٌ لغويّ مؤجَّل للمالك: هل يُسمح استيراد
رمزٍ غير مُصدَّر (لا يُستنتَج نوعه حاليًّا، كأساس origin/dev).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…تضافة ٤

العلّة: `StructDecl` عقدة AST متمايزة عن `ClassDecl`، ومعالِجا الاستيراد
(`buildFromImportStmt`/`buildImportStmt`) كانا يلتقطان Function/Var/ClassDecl فقط
ويُسقطان StructDecl صامتًا ⇒ البنية المستوردة لا تُسجَّل في جدول الأصناف ⇒ `نقطة()`
في الرئيسة يفشل «استدعاء دالة غير معرّفة».

الإصلاح: التقاط `StructDecl` في الفروع الثلاثة (ExportDecl/ExportStmt/عارٍ) في كلا
المعالِجين، وإضافته لاختيار symbolName، وبناؤه بـ`buildStatement(structDecl)` الذي
يوجّهه إلى statement_types.cpp (يحسب الحقول ويسجّل بـaddClass/classTable_) كما تفعل
الوحدة الرئيسة في الطور 2أ-0 (ISSUE-051)، مع حارس `getClass` ضدّ التسجيل المزدوج.
تخطيط حقول البنية ذاتيّ من حقولها المصرَّحة ⇒ لا حاجة لتسجيلٍ مسبق كالدوالّ.

التحقّق: استيراد `نقطة` + `نقطة()` + وصول حقل عبر وحدة ⇒ المترجم = المفسّر (3/4/7).
اختبار مزدوج جديد 062_import_exported_struct + اختبار الفجوة الأحاديّ 002 يمرّ.
البوّابة الكاملة 95.6% — 136 فشلًا (= الأساس تمامًا، بنفس الاختبارات)، بلا انحدار.
رفع قيد ISSUE-026 من SoT (20_declarations/30_oop) والتقارير. مراجعة أميليا: لا عيب حرِج.

دَين سابق موثَّق (لم يُدخِله هذا التغيير): حقلٌ من نوع بنية (بنية متداخلة) ينهار إلى
Integer في statement_types.cpp (خارطة الأنواع بلا حالة Struct + StructField بلا اسم
نوع) ⇒ البنى المتداخلة عبر الوحدات فجوةٌ مستقلّة (اختبار 001_struct_field_nested،
فاشل في الأساس). اختبار 062 يستعمل حقولًا قياسيّة (صحيح النطاق).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown

📚 تذكير مزامنة دليل المطوّرين

هذا الـPR يلمس مصادر موثَّقة في دليل المطوّرين. راجع الفصول الآتية وحدّثها إن تغيّر سلوكها، ثم ثبّت البصمات هناك (python scripts/check_sync.py --update):

بندٌ في معيار الإنجاز. تذكيرٌ آليّ — لا يحجب الدمج.

@github-actions

Copy link
Copy Markdown

📘 تذكير مزامنة التوثيق التقنيّ

هذا الـPR يلمس مصادر يعرضها التوثيق التقنيّ. الصفحات المُولَّدة تُعاد بناؤها آليًّا عند الدمج/الإصدار؛ راجع الصفحات النثريّة إن تغيّر سلوكها:

تذكيرٌ آليّ — لا يحجب الدمج.

@SalehKadah SalehKadah changed the title مترجم: انتشار أنواع المعاملات غير المصرَّحة عبر حدود الوحدات (متعدٍّ) — تقوية نظام الوحدات (حاجز الاستضافة ٤) نظام الوحدات (حاجز الاستضافة ٤): انتشار أنواع المعاملات عبر الوحدات + «صدّر بنية» عبر الوحدات (ISSUE-026) Jul 25, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant