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(); |