Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_hotspot
提交
914708a4
D
dragonwell8_hotspot
项目概览
openanolis
/
dragonwell8_hotspot
通知
2
Star
2
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
dragonwell8_hotspot
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
914708a4
编写于
6月 30, 2016
作者:
V
vkempik
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
8157176: Improved classfile parsing
Reviewed-by: pliden
上级
6c3c76a4
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
44 addition
and
4 deletion
+44
-4
src/share/vm/runtime/sharedRuntime.cpp
src/share/vm/runtime/sharedRuntime.cpp
+1
-3
src/share/vm/runtime/signature.cpp
src/share/vm/runtime/signature.cpp
+43
-1
未找到文件。
src/share/vm/runtime/sharedRuntime.cpp
浏览文件 @
914708a4
...
...
@@ -2830,8 +2830,6 @@ VMRegPair *SharedRuntime::find_callee_arguments(Symbol* sig, bool has_receiver,
char
*
s
=
sig
->
as_C_string
();
int
len
=
(
int
)
strlen
(
s
);
s
++
;
len
--
;
// Skip opening paren
char
*
t
=
s
+
len
;
while
(
*
(
--
t
)
!=
')'
)
;
// Find close paren
BasicType
*
sig_bt
=
NEW_RESOURCE_ARRAY
(
BasicType
,
256
);
VMRegPair
*
regs
=
NEW_RESOURCE_ARRAY
(
VMRegPair
,
256
);
...
...
@@ -2840,7 +2838,7 @@ VMRegPair *SharedRuntime::find_callee_arguments(Symbol* sig, bool has_receiver,
sig_bt
[
cnt
++
]
=
T_OBJECT
;
// Receiver is argument 0; not in signature
}
while
(
s
<
t
)
{
while
(
*
s
!=
')'
)
{
// Find closing right paren
switch
(
*
s
++
)
{
// Switch on signature character
case
'B'
:
sig_bt
[
cnt
++
]
=
T_BYTE
;
break
;
case
'C'
:
sig_bt
[
cnt
++
]
=
T_CHAR
;
break
;
...
...
src/share/vm/runtime/signature.cpp
浏览文件 @
914708a4
...
...
@@ -225,7 +225,49 @@ void SignatureIterator::iterate_returntype() {
_index
=
0
;
expect
(
'('
);
Symbol
*
sig
=
_signature
;
while
(
sig
->
byte_at
(
_index
)
!=
')'
)
_index
++
;
// Need to skip over each type in the signature's argument list until a
// closing ')' is found., then get the return type. We cannot just scan
// for the first ')' because ')' is a legal character in a type name.
while
(
sig
->
byte_at
(
_index
)
!=
')'
)
{
switch
(
sig
->
byte_at
(
_index
))
{
case
'B'
:
case
'C'
:
case
'D'
:
case
'F'
:
case
'I'
:
case
'J'
:
case
'S'
:
case
'Z'
:
case
'V'
:
{
_index
++
;
}
break
;
case
'L'
:
{
while
(
sig
->
byte_at
(
_index
++
)
!=
';'
)
;
}
break
;
case
'['
:
{
int
begin
=
++
_index
;
skip_optional_size
();
while
(
sig
->
byte_at
(
_index
)
==
'['
)
{
_index
++
;
skip_optional_size
();
}
if
(
sig
->
byte_at
(
_index
)
==
'L'
)
{
while
(
sig
->
byte_at
(
_index
++
)
!=
';'
)
;
}
else
{
_index
++
;
}
}
break
;
default:
ShouldNotReachHere
();
break
;
}
}
expect
(
')'
);
// Parse return type
_parameter_index
=
-
1
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录