1 /* |
1 /* |
2 * Copyright (c) 2003, 2018, Oracle and/or its affiliates. All rights reserved. |
2 * Copyright (c) 2003, 2019, Oracle and/or its affiliates. All rights reserved. |
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
4 * |
4 * |
5 * This code is free software; you can redistribute it and/or modify it |
5 * This code is free software; you can redistribute it and/or modify it |
6 * under the terms of the GNU General Public License version 2 only, as |
6 * under the terms of the GNU General Public License version 2 only, as |
7 * published by the Free Software Foundation. |
7 * published by the Free Software Foundation. |
1591 |
1591 |
1592 for (int i = 0; i < total_in_args ; i++ ) { |
1592 for (int i = 0; i < total_in_args ; i++ ) { |
1593 out_sig_bt[argc++] = in_sig_bt[i]; |
1593 out_sig_bt[argc++] = in_sig_bt[i]; |
1594 } |
1594 } |
1595 } else { |
1595 } else { |
1596 Thread* THREAD = Thread::current(); |
|
1597 in_elem_bt = NEW_RESOURCE_ARRAY(BasicType, total_in_args); |
1596 in_elem_bt = NEW_RESOURCE_ARRAY(BasicType, total_in_args); |
1598 SignatureStream ss(method->signature()); |
1597 SignatureStream ss(method->signature()); |
1599 for (int i = 0; i < total_in_args ; i++ ) { |
1598 for (int i = 0; i < total_in_args ; i++ ) { |
1600 if (in_sig_bt[i] == T_ARRAY) { |
1599 if (in_sig_bt[i] == T_ARRAY) { |
1601 // Arrays are passed as int, elem* pair |
1600 // Arrays are passed as int, elem* pair |
1602 out_sig_bt[argc++] = T_INT; |
1601 out_sig_bt[argc++] = T_INT; |
1603 out_sig_bt[argc++] = T_ADDRESS; |
1602 out_sig_bt[argc++] = T_ADDRESS; |
1604 Symbol* atype = ss.as_symbol(CHECK_NULL); |
1603 Symbol* atype = ss.as_symbol(); |
1605 const char* at = atype->as_C_string(); |
1604 const char* at = atype->as_C_string(); |
1606 if (strlen(at) == 2) { |
1605 if (strlen(at) == 2) { |
1607 assert(at[0] == '[', "must be"); |
1606 assert(at[0] == '[', "must be"); |
1608 switch (at[1]) { |
1607 switch (at[1]) { |
1609 case 'B': in_elem_bt[i] = T_BYTE; break; |
1608 case 'B': in_elem_bt[i] = T_BYTE; break; |