Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_hotspot
提交
29bff7f7
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看板
提交
29bff7f7
编写于
4月 18, 2013
作者:
B
bharadwaj
浏览文件
操作
浏览文件
下载
差异文件
Merge
上级
2da9019f
08a2409c
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
44 addition
and
12 deletion
+44
-12
src/share/vm/classfile/classFileParser.cpp
src/share/vm/classfile/classFileParser.cpp
+8
-3
src/share/vm/classfile/genericSignatures.cpp
src/share/vm/classfile/genericSignatures.cpp
+9
-2
src/share/vm/interpreter/linkResolver.cpp
src/share/vm/interpreter/linkResolver.cpp
+22
-7
src/share/vm/prims/methodHandles.cpp
src/share/vm/prims/methodHandles.cpp
+5
-0
未找到文件。
src/share/vm/classfile/classFileParser.cpp
浏览文件 @
29bff7f7
...
@@ -436,14 +436,19 @@ constantPoolHandle ClassFileParser::parse_constant_pool(TRAPS) {
...
@@ -436,14 +436,19 @@ constantPoolHandle ClassFileParser::parse_constant_pool(TRAPS) {
ref_index
,
CHECK_
(
nullHandle
));
ref_index
,
CHECK_
(
nullHandle
));
break
;
break
;
case
JVM_REF_invokeVirtual
:
case
JVM_REF_invokeVirtual
:
case
JVM_REF_invokeStatic
:
case
JVM_REF_invokeSpecial
:
case
JVM_REF_newInvokeSpecial
:
case
JVM_REF_newInvokeSpecial
:
check_property
(
check_property
(
tag
.
is_method
(),
tag
.
is_method
(),
"Invalid constant pool index %u in class file %s (not a method)"
,
"Invalid constant pool index %u in class file %s (not a method)"
,
ref_index
,
CHECK_
(
nullHandle
));
ref_index
,
CHECK_
(
nullHandle
));
break
;
break
;
case
JVM_REF_invokeStatic
:
case
JVM_REF_invokeSpecial
:
check_property
(
tag
.
is_method
()
||
tag
.
is_interface_method
(),
"Invalid constant pool index %u in class file %s (not a method)"
,
ref_index
,
CHECK_
(
nullHandle
));
break
;
case
JVM_REF_invokeInterface
:
case
JVM_REF_invokeInterface
:
check_property
(
check_property
(
tag
.
is_interface_method
(),
tag
.
is_interface_method
(),
...
@@ -3837,7 +3842,7 @@ instanceKlassHandle ClassFileParser::parseClassFile(Symbol* name,
...
@@ -3837,7 +3842,7 @@ instanceKlassHandle ClassFileParser::parseClassFile(Symbol* name,
}
}
if
(
TraceClassLoadingPreorder
)
{
if
(
TraceClassLoadingPreorder
)
{
tty
->
print
(
"[Loading %s"
,
name
->
as_klass_external_name
()
);
tty
->
print
(
"[Loading %s"
,
(
name
!=
NULL
)
?
name
->
as_klass_external_name
()
:
"NoName"
);
if
(
cfs
->
source
()
!=
NULL
)
tty
->
print
(
" from %s"
,
cfs
->
source
());
if
(
cfs
->
source
()
!=
NULL
)
tty
->
print
(
" from %s"
,
cfs
->
source
());
tty
->
print_cr
(
"]"
);
tty
->
print_cr
(
"]"
);
}
}
...
...
src/share/vm/classfile/genericSignatures.cpp
浏览文件 @
29bff7f7
...
@@ -268,8 +268,15 @@ ClassDescriptor* ClassDescriptor::parse_generic_signature(
...
@@ -268,8 +268,15 @@ ClassDescriptor* ClassDescriptor::parse_generic_signature(
Klass
*
outer
=
SystemDictionary
::
find
(
Klass
*
outer
=
SystemDictionary
::
find
(
outer_name
,
class_loader
,
protection_domain
,
CHECK_NULL
);
outer_name
,
class_loader
,
protection_domain
,
CHECK_NULL
);
if
(
outer
==
NULL
&&
!
THREAD
->
is_Compiler_thread
())
{
if
(
outer
==
NULL
&&
!
THREAD
->
is_Compiler_thread
())
{
outer
=
SystemDictionary
::
resolve_super_or_fail
(
original_name
,
if
(
outer_name
==
ik
->
super
()
->
name
())
{
outer_name
,
class_loader
,
protection_domain
,
false
,
CHECK_NULL
);
outer
=
SystemDictionary
::
resolve_super_or_fail
(
original_name
,
outer_name
,
class_loader
,
protection_domain
,
false
,
CHECK_NULL
);
}
else
{
outer
=
SystemDictionary
::
resolve_or_fail
(
outer_name
,
class_loader
,
protection_domain
,
false
,
CHECK_NULL
);
}
}
}
InstanceKlass
*
outer_ik
;
InstanceKlass
*
outer_ik
;
...
...
src/share/vm/interpreter/linkResolver.cpp
浏览文件 @
29bff7f7
...
@@ -1014,13 +1014,28 @@ void LinkResolver::runtime_resolve_interface_method(CallInfo& result, methodHand
...
@@ -1014,13 +1014,28 @@ void LinkResolver::runtime_resolve_interface_method(CallInfo& result, methodHand
resolved_method
->
name
(),
resolved_method
->
name
(),
resolved_method
->
signature
()));
resolved_method
->
signature
()));
}
}
// check if public
// check access
if
(
!
sel_method
->
is_public
())
{
if
(
sel_method
->
method_holder
()
->
is_interface
())
{
ResourceMark
rm
(
THREAD
);
// Method holder is an interface. Throw Illegal Access Error if sel_method
THROW_MSG
(
vmSymbols
::
java_lang_IllegalAccessError
(),
// is neither public nor private.
Method
::
name_and_sig_as_C_string
(
recv_klass
(),
if
(
!
(
sel_method
->
is_public
()
||
sel_method
->
is_private
()))
{
sel_method
->
name
(),
ResourceMark
rm
(
THREAD
);
sel_method
->
signature
()));
THROW_MSG
(
vmSymbols
::
java_lang_IllegalAccessError
(),
Method
::
name_and_sig_as_C_string
(
recv_klass
(),
sel_method
->
name
(),
sel_method
->
signature
()));
}
}
else
{
// Method holder is a class. Throw Illegal Access Error if sel_method
// is not public.
if
(
!
sel_method
->
is_public
())
{
ResourceMark
rm
(
THREAD
);
THROW_MSG
(
vmSymbols
::
java_lang_IllegalAccessError
(),
Method
::
name_and_sig_as_C_string
(
recv_klass
(),
sel_method
->
name
(),
sel_method
->
signature
()));
}
}
}
// check if abstract
// check if abstract
if
(
check_null_and_abstract
&&
sel_method
->
is_abstract
())
{
if
(
check_null_and_abstract
&&
sel_method
->
is_abstract
())
{
...
...
src/share/vm/prims/methodHandles.cpp
浏览文件 @
29bff7f7
...
@@ -187,6 +187,11 @@ oop MethodHandles::init_method_MemberName(oop mname_oop, Method* m, bool do_disp
...
@@ -187,6 +187,11 @@ oop MethodHandles::init_method_MemberName(oop mname_oop, Method* m, bool do_disp
flags
|=
IS_CONSTRUCTOR
|
(
JVM_REF_invokeSpecial
<<
REFERENCE_KIND_SHIFT
);
flags
|=
IS_CONSTRUCTOR
|
(
JVM_REF_invokeSpecial
<<
REFERENCE_KIND_SHIFT
);
}
else
if
(
mods
.
is_static
())
{
}
else
if
(
mods
.
is_static
())
{
flags
|=
IS_METHOD
|
(
JVM_REF_invokeStatic
<<
REFERENCE_KIND_SHIFT
);
flags
|=
IS_METHOD
|
(
JVM_REF_invokeStatic
<<
REFERENCE_KIND_SHIFT
);
// Check if this method is a lambda method that is generated as
// private static method.
if
(
m
->
is_private
()
&&
m
->
method_holder
()
->
is_interface
())
{
vmindex
=
klassItable
::
compute_itable_index
(
m
);
}
}
else
if
(
receiver_limit
!=
mklass
&&
}
else
if
(
receiver_limit
!=
mklass
&&
!
receiver_limit
->
is_subtype_of
(
mklass
))
{
!
receiver_limit
->
is_subtype_of
(
mklass
))
{
return
NULL
;
// bad receiver limit
return
NULL
;
// bad receiver limit
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录