Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell11
提交
fe59d951
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,发现更多精彩内容 >>
提交
fe59d951
编写于
7月 02, 2013
作者:
L
lagergren
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
8017082: Long array literals were slightly broken
Reviewed-by: sundar, attila
上级
e80ddc6e
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
64 addition
and
6 deletion
+64
-6
nashorn/src/jdk/nashorn/internal/codegen/CodeGenerator.java
nashorn/src/jdk/nashorn/internal/codegen/CodeGenerator.java
+1
-1
nashorn/src/jdk/nashorn/internal/codegen/types/Type.java
nashorn/src/jdk/nashorn/internal/codegen/types/Type.java
+6
-4
nashorn/src/jdk/nashorn/internal/ir/LiteralNode.java
nashorn/src/jdk/nashorn/internal/ir/LiteralNode.java
+24
-1
nashorn/test/script/basic/JDK-8017082.js
nashorn/test/script/basic/JDK-8017082.js
+33
-0
未找到文件。
nashorn/src/jdk/nashorn/internal/codegen/CodeGenerator.java
浏览文件 @
fe59d951
...
...
@@ -1110,7 +1110,7 @@ final class CodeGenerator extends NodeOperatorVisitor<CodeGeneratorLexicalContex
* @return the method generator that was used
*/
private
MethodEmitter
loadArray
(
final
ArrayLiteralNode
arrayLiteralNode
,
final
ArrayType
arrayType
)
{
assert
arrayType
==
Type
.
INT_ARRAY
||
arrayType
==
Type
.
NUMBER_ARRAY
||
arrayType
==
Type
.
OBJECT_ARRAY
;
assert
arrayType
==
Type
.
INT_ARRAY
||
arrayType
==
Type
.
LONG_ARRAY
||
arrayType
==
Type
.
NUMBER_ARRAY
||
arrayType
==
Type
.
OBJECT_ARRAY
;
final
Node
[]
nodes
=
arrayLiteralNode
.
getValue
();
final
Object
presets
=
arrayLiteralNode
.
getPresets
();
...
...
nashorn/src/jdk/nashorn/internal/codegen/types/Type.java
浏览文件 @
fe59d951
...
...
@@ -36,6 +36,7 @@ import static jdk.internal.org.objectweb.asm.Opcodes.DUP_X2;
import
static
jdk
.
internal
.
org
.
objectweb
.
asm
.
Opcodes
.
IALOAD
;
import
static
jdk
.
internal
.
org
.
objectweb
.
asm
.
Opcodes
.
IASTORE
;
import
static
jdk
.
internal
.
org
.
objectweb
.
asm
.
Opcodes
.
INVOKESTATIC
;
import
static
jdk
.
internal
.
org
.
objectweb
.
asm
.
Opcodes
.
LALOAD
;
import
static
jdk
.
internal
.
org
.
objectweb
.
asm
.
Opcodes
.
LASTORE
;
import
static
jdk
.
internal
.
org
.
objectweb
.
asm
.
Opcodes
.
NEWARRAY
;
import
static
jdk
.
internal
.
org
.
objectweb
.
asm
.
Opcodes
.
POP
;
...
...
@@ -43,6 +44,7 @@ import static jdk.internal.org.objectweb.asm.Opcodes.POP2;
import
static
jdk
.
internal
.
org
.
objectweb
.
asm
.
Opcodes
.
SWAP
;
import
static
jdk
.
internal
.
org
.
objectweb
.
asm
.
Opcodes
.
T_DOUBLE
;
import
static
jdk
.
internal
.
org
.
objectweb
.
asm
.
Opcodes
.
T_INT
;
import
static
jdk
.
internal
.
org
.
objectweb
.
asm
.
Opcodes
.
T_LONG
;
import
java.lang.invoke.MethodHandle
;
import
java.util.Collections
;
...
...
@@ -729,19 +731,19 @@ public abstract class Type implements Comparable<Type>, BytecodeOps {
@Override
public
Type
aload
(
final
MethodVisitor
method
)
{
method
.
visitInsn
(
I
ALOAD
);
return
INT
;
method
.
visitInsn
(
L
ALOAD
);
return
LONG
;
}
@Override
public
Type
newarray
(
final
MethodVisitor
method
)
{
method
.
visitIntInsn
(
NEWARRAY
,
T_
INT
);
method
.
visitIntInsn
(
NEWARRAY
,
T_
LONG
);
return
this
;
}
@Override
public
Type
getElementType
()
{
return
INT
;
return
LONG
;
}
};
...
...
nashorn/src/jdk/nashorn/internal/ir/LiteralNode.java
浏览文件 @
fe59d951
...
...
@@ -621,8 +621,10 @@ public abstract class LiteralNode<T> extends Node implements PropertyKey {
elementType
=
Type
.
INT
;
analyzeElements
();
if
(
elementType
==
Type
.
INT
)
{
if
(
elementType
.
isInteger
()
)
{
presetIntArray
();
}
else
if
(
elementType
.
isLong
())
{
presetLongArray
();
}
else
if
(
elementType
.
isNumeric
())
{
presetNumberArray
();
}
else
{
...
...
@@ -649,6 +651,25 @@ public abstract class LiteralNode<T> extends Node implements PropertyKey {
postsets
=
Arrays
.
copyOf
(
computed
,
nComputed
);
}
private
void
presetLongArray
()
{
final
long
[]
array
=
new
long
[
value
.
length
];
final
int
[]
computed
=
new
int
[
value
.
length
];
int
nComputed
=
0
;
for
(
int
i
=
0
;
i
<
value
.
length
;
i
++)
{
final
Object
element
=
objectAsConstant
(
value
[
i
]);
if
(
element
instanceof
Number
)
{
array
[
i
]
=
((
Number
)
element
).
longValue
();
}
else
{
computed
[
nComputed
++]
=
i
;
}
}
presets
=
array
;
postsets
=
Arrays
.
copyOf
(
computed
,
nComputed
);
}
private
void
presetNumberArray
()
{
final
double
[]
array
=
new
double
[
value
.
length
];
final
int
[]
computed
=
new
int
[
value
.
length
];
...
...
@@ -746,6 +767,8 @@ public abstract class LiteralNode<T> extends Node implements PropertyKey {
public
Type
getType
()
{
if
(
elementType
.
isInteger
())
{
return
Type
.
INT_ARRAY
;
}
else
if
(
elementType
.
isLong
())
{
return
Type
.
LONG_ARRAY
;
}
else
if
(
elementType
.
isNumeric
())
{
return
Type
.
NUMBER_ARRAY
;
}
else
{
...
...
nashorn/test/script/basic/JDK-8017082.js
0 → 100644
浏览文件 @
fe59d951
/*
* Copyright (c) 2010, 2013, 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.
*/
/**
* Long array literals were broken
*
* @test
* @run
*/
function
f
()
{
var
z
=
c
>>
e
>>>
0
;
var
x
=
[
z
];
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录