90 } |
90 } |
91 |
91 |
92 // local num may be greater than size of parameters because long/double occupies two slots |
92 // local num may be greater than size of parameters because long/double occupies two slots |
93 while(!ss.at_return_type()) { |
93 while(!ss.at_return_type()) { |
94 init_local_num += _verifier->change_sig_to_verificationType( |
94 init_local_num += _verifier->change_sig_to_verificationType( |
95 &ss, &_locals[init_local_num], |
95 &ss, &_locals[init_local_num]); |
96 CHECK_VERIFY_(verifier(), VerificationType::bogus_type())); |
|
97 ss.next(); |
96 ss.next(); |
98 } |
97 } |
99 _locals_size = init_local_num; |
98 _locals_size = init_local_num; |
100 |
99 |
101 switch (ss.type()) { |
100 switch (ss.type()) { |
102 case T_OBJECT: |
101 case T_OBJECT: |
103 case T_ARRAY: |
102 case T_ARRAY: |
104 { |
103 { |
105 Symbol* sig = ss.as_symbol(CHECK_(VerificationType::bogus_type())); |
104 Symbol* sig = ss.as_symbol(); |
106 if (!sig->is_permanent()) { |
105 if (!sig->is_permanent()) { |
107 // Create another symbol to save as signature stream unreferences |
106 // Create another symbol to save as signature stream unreferences |
108 // this symbol. |
107 // this symbol. |
109 Symbol *sig_copy = |
108 Symbol *sig_copy = |
110 verifier()->create_temporary_symbol(sig, 0, sig->utf8_length(), |
109 verifier()->create_temporary_symbol(sig, 0, sig->utf8_length()); |
111 CHECK_(VerificationType::bogus_type())); |
|
112 assert(sig_copy == sig, "symbols don't match"); |
110 assert(sig_copy == sig, "symbols don't match"); |
113 sig = sig_copy; |
111 sig = sig_copy; |
114 } |
112 } |
115 return VerificationType::reference_type(sig); |
113 return VerificationType::reference_type(sig); |
116 } |
114 } |