2012-03-15 28 views
7

मैं एक शौकिया जेवीएम कार्यान्वयन पर काम कर रहा हूं, और मैं यह सुनिश्चित करने की कोशिश कर रहा हूं कि मेरे पास spec में सभी ऑपोड के लिए परीक्षण कवरेज है। मैं इसे पिछले कुछ लोगों तक प्राप्त कर चुका हूं, लेकिन nop और swap मुझे दूर कर रहा है। उदाहरण के लिए, यहाँ एक सरल समारोह swap उपयोग कर सकते हैं कि क्या है:क्या जावा कोड 'स्वैप' और 'एनओपी' ऑपकोड का उपयोग करने के लिए जावा 1.6 को मजबूर करेगा?

static int do_swap() { 
    int a = 56; 
    int b = 32; 
    return b%a; 
} 

लेकिन बाईटकोड javac 1.6 द्वारा उत्पादित स्थानीय भंडारण के एवज में अदला-बदली से बचा जाता है:

static int do_swap(); 
    Code: 
    0: bipush 56 
    2: istore_0 
    3: bipush 32 
    5: istore_1 
    6: iload_1 
    7: iload_0 
    8: irem 
    9: ireturn 

कोई भी विचार?

उत्तर

6

कोई नहीं। जावा भाषा विशिष्टता ऐसी गारंटी प्रदान नहीं करती है। आप Jasmin (एक बाइटकोड असेंबलर) का उपयोग करके अपना स्वयं का जावा बाइटकोड लिख सकते हैं।

+1

मुझे लगता है कि क्राकाटो असेंबलर जेवीएम परीक्षण मामलों को उत्पन्न करने के लिए और अधिक उपयोगी होगा, क्योंकि यह क्लासफाइल प्रारूप की अधिक अस्पष्ट विशेषताओं का समर्थन करता है जो जैस्मीन नहीं करता है। (प्रकटीकरण मैंने इसे लिखा)। लेकिन इस तरह के कुछ आसान के लिए, जैस्मीन काफी अच्छा है। – Antimony