2013-02-12 15 views
14

फेंक मैं this blog post, this documentation page और this example पढ़ा है, लेकिन मैं अभी भी समझ में नहीं आता कि कैसे एक गैर सी ++ उन्मुख भाषा के लिए LLVM के IRBuilder का उपयोग कर एक बुनियादी अपवाद फेंकने के लिए।LLVM अपवाद

  • एक llvm::Value बनाएं throwed मूल्य युक्त

    मेरी समझ से, मैं करने के लिए है।

  • कॉल "एक फ़ंक्शन", इसे फेंक दिया गया मान गुजर रहा है। यह समारोह वापस नहीं आएगा।

उदाहरण क्रम में एक C++ अपवाद फेंकने के लिए एक प्रणाली rewinding समारोह (_Unwind_RaiseException) का उपयोग कर रहा है, और मैं वास्तव में समझ में नहीं आता कि कैसे बजाय अपने खुद के स्थापना समारोह का उपयोग करने के (के बाद से मैं केवल एक वस्तु सूचक हटाने की आवश्यकता)। मैं क्या खो रहा हूँ ?

उत्तर

3

संक्षिप्त उत्तर यह है कि _Unwind_RaiseException एक सी ++ - विशिष्ट कार्य नहीं है। यह libunwind पुस्तकालय से आता है, और किसी भी प्रकार के अपवाद फेंकने की अनुमति देता है।

अधिक जानकारी these blog posts पर मिल सकती है।

0

चूंकि आप मौजूदा सी ++ अपवाद हैंडलिंग इंफ्रास्ट्रक्चर का उपयोग नहीं करना चाहते हैं, तो आपको अपनी भाषा के लिए इसके कुछ हिस्सों को दोहराना होगा।

आप libstdc++ में compiler-rt में सी unwinder के कार्यान्वयन (या libstdc++ में काफी अधिक जटिल एक), और एक unwinder के आह्वान का उपयोग के साथ शुरू करने के लिए कर सकते हैं।

+0

ये सभी लिंक अब मृत हैं ... –

संबंधित मुद्दे