เฟสที่ 3: การแปลง AST
ขั้นตอนนี้เริ่มจากการเก็บเมตาดาต้าเกี่ยวกับแต่ละโพรบผ่านการท่อง AST ด้วย MetadataCollector
ตัวเก็บนี้ติดตามข้อมูลต่อไปนี้ (รายการนี้อาจขยายเพิ่มในอนาคต):
- ฟังก์ชันไลบรารีของผู้ใช้ที่ถูกเรียกใช้จริงในสคริปต์
- ฟังก์ชันที่ผูกไว้ (bound functions) ที่ถูกเรียกใช้จริงในสคริปต์
- ชนิดข้อมูลแต่ละชนิดที่ต้องถูกระบายตอน report
- สตริงที่จำเป็นต้องมีเพื่อให้สคริปต์ทำงานได้
- ว่าโพรบใดมีสถานะที่ต้องเริ่มต้นหรือไม่
การติดตามสถานะทั้งหมดนี้ช่วยให้ปล่อยโค้ดได้ดีขึ้นในแบ็กเอนด์ของคอมไพเลอร์
อีกทั้งยังสรุปตัวแปรที่ผูกแบบสแตติกและแบบพลวัตของแต่ละโพรบให้ด้วย
รายการนี้ถูกใช้ในการเขียนไบต์โค้ดใหม่เพื่อนิยามข้อมูลสแตติกที่จำเป็นตอนคอมไพล์ไทม์ และเพื่อปล่อยโค้ดที่จำเป็นสำหรับนิยามข้อมูลพลวัตตอนรันไทม์
สำหรับแบ็กเอนด์ wei ตัวแปรที่ผูกแต่ละตัวจะถูกขอจากเอนจิน เพื่อให้เอนจินส่งค่าของมันให้ฟังก์ชันคอลแบ็กของโพรบหรือเพรดิเคต
เมื่อทำการเขียนไบต์โค้ดใหม่ AST ที่เป็นผลจากขั้นตอนเก็บเมตาดาต้าจะถูกแปลงให้เป็น SimpleAst