src/share/vm/classfile/stackMapTable.cpp

changeset 2754
7144a1d6e0a9
parent 2497
3582bf76420e
child 2759
3449f5e02cc4
equal deleted inserted replaced
2753:37be97a58393 2754:7144a1d6e0a9
96 } 96 }
97 97
98 bool result = true; 98 bool result = true;
99 StackMapFrame *stackmap_frame = _frame_array[frame_index]; 99 StackMapFrame *stackmap_frame = _frame_array[frame_index];
100 if (match) { 100 if (match) {
101 // when checking handler target, match == true && update == false
102 bool is_exception_handler = !update;
101 // Has direct control flow from last instruction, need to match the two 103 // Has direct control flow from last instruction, need to match the two
102 // frames. 104 // frames.
103 result = frame->is_assignable_to( 105 result = frame->is_assignable_to(
104 stackmap_frame, CHECK_VERIFY_(frame->verifier(), false)); 106 stackmap_frame, is_exception_handler,
107 CHECK_VERIFY_(frame->verifier(), false));
105 } 108 }
106 if (update) { 109 if (update) {
107 // Use the frame in stackmap table as current frame 110 // Use the frame in stackmap table as current frame
108 int lsize = stackmap_frame->locals_size(); 111 int lsize = stackmap_frame->locals_size();
109 int ssize = stackmap_frame->stack_size(); 112 int ssize = stackmap_frame->stack_size();

mercurial