Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell11
提交
e2cb1d48
D
dragonwell11
项目概览
openanolis
/
dragonwell11
通知
7
Star
2
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
dragonwell11
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
e2cb1d48
编写于
10月 31, 2014
作者:
H
hannesw
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
8062132: Nashorn incorrectly binds this for constructor created by another function
Reviewed-by: jlaskey, sundar
上级
73e42d26
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
95 addition
and
10 deletion
+95
-10
nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/PropertyMap.java
...are/classes/jdk/nashorn/internal/runtime/PropertyMap.java
+9
-10
nashorn/test/script/basic/JDK-8062132.js
nashorn/test/script/basic/JDK-8062132.js
+80
-0
nashorn/test/script/basic/JDK-8062132.js.EXPECTED
nashorn/test/script/basic/JDK-8062132.js.EXPECTED
+6
-0
未找到文件。
nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/PropertyMap.java
浏览文件 @
e2cb1d48
...
...
@@ -84,7 +84,7 @@ public final class PropertyMap implements Iterable<Object>, Serializable {
private
transient
WeakHashMap
<
Property
,
SoftReference
<
PropertyMap
>>
history
;
/** History of prototypes, used to limit map duplication. */
private
transient
WeakHashMap
<
PropertyMap
,
SoftReference
<
PropertyMap
>>
protoHistory
;
private
transient
WeakHashMap
<
ScriptObject
,
SoftReference
<
PropertyMap
>>
protoHistory
;
/** property listeners */
private
transient
PropertyListeners
listeners
;
...
...
@@ -677,14 +677,14 @@ public final class PropertyMap implements Iterable<Object>, Serializable {
/**
* Check prototype history for an existing property map with specified prototype.
*
* @param p
arentMap
New prototype object.
* @param p
roto
New prototype object.
*
* @return Existing {@link PropertyMap} or {@code null} if not found.
*/
private
PropertyMap
checkProtoHistory
(
final
PropertyMap
parentMap
)
{
private
PropertyMap
checkProtoHistory
(
final
ScriptObject
proto
)
{
final
PropertyMap
cachedMap
;
if
(
protoHistory
!=
null
)
{
final
SoftReference
<
PropertyMap
>
weakMap
=
protoHistory
.
get
(
p
arentMap
);
final
SoftReference
<
PropertyMap
>
weakMap
=
protoHistory
.
get
(
p
roto
);
cachedMap
=
(
weakMap
!=
null
?
weakMap
.
get
()
:
null
);
}
else
{
cachedMap
=
null
;
...
...
@@ -700,15 +700,15 @@ public final class PropertyMap implements Iterable<Object>, Serializable {
/**
* Add a map to the prototype history.
*
* @param
parentMap
Prototype to add (key.)
* @param
newProto
Prototype to add (key.)
* @param newMap {@link PropertyMap} associated with prototype.
*/
private
void
addToProtoHistory
(
final
PropertyMap
parentMap
,
final
PropertyMap
newMap
)
{
private
void
addToProtoHistory
(
final
ScriptObject
newProto
,
final
PropertyMap
newMap
)
{
if
(
protoHistory
==
null
)
{
protoHistory
=
new
WeakHashMap
<>();
}
protoHistory
.
put
(
parentMap
,
new
SoftReference
<>(
newMap
));
protoHistory
.
put
(
newProto
,
new
SoftReference
<>(
newMap
));
}
/**
...
...
@@ -883,8 +883,7 @@ public final class PropertyMap implements Iterable<Object>, Serializable {
*/
public
PropertyMap
changeProto
(
final
ScriptObject
newProto
)
{
final
PropertyMap
parentMap
=
newProto
==
null
?
null
:
newProto
.
getMap
();
final
PropertyMap
nextMap
=
checkProtoHistory
(
parentMap
);
final
PropertyMap
nextMap
=
checkProtoHistory
(
newProto
);
if
(
nextMap
!=
null
)
{
return
nextMap
;
}
...
...
@@ -894,7 +893,7 @@ public final class PropertyMap implements Iterable<Object>, Serializable {
}
final
PropertyMap
newMap
=
new
PropertyMap
(
this
);
addToProtoHistory
(
parentMap
,
newMap
);
addToProtoHistory
(
newProto
,
newMap
);
return
newMap
;
}
...
...
nashorn/test/script/basic/JDK-8062132.js
0 → 100644
浏览文件 @
e2cb1d48
/*
* Copyright (c) 2010, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/**
* 8062132: Nashorn incorrectly binds "this" for constructor created by another function
*
* @test
* @run
*/
function
subclass
(
parentCtor
,
proto
)
{
function
C
()
{
parentCtor
.
call
(
this
);
}
C
.
prototype
=
Object
.
create
(
parentCtor
.
prototype
);
for
(
var
prop
in
proto
)
{
if
(
proto
.
hasOwnProperty
(
prop
))
{
C
.
prototype
[
prop
]
=
proto
[
prop
];
}
}
return
C
;
}
var
Parent
=
function
()
{
this
.
init
();
};
Parent
.
prototype
=
{
init
:
null
};
var
Child1
=
subclass
(
Parent
,
{
prop1
:
1
,
init
:
function
()
{
print
(
'
child 1
'
);
}
});
var
Child2
=
subclass
(
Parent
,
{
init
:
function
()
{
print
(
'
child 2
'
);
}
});
var
Child3
=
subclass
(
Parent
,
{
prop1
:
1
,
init
:
function
()
{
print
(
'
child 3
'
);
}
});
new
Child1
();
new
Child2
();
new
Child3
();
new
Child1
();
new
Child2
();
new
Child3
();
nashorn/test/script/basic/JDK-8062132.js.EXPECTED
0 → 100644
浏览文件 @
e2cb1d48
child 1
child 2
child 3
child 1
child 2
child 3
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录