Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_jdk
提交
9b626632
D
dragonwell8_jdk
项目概览
openanolis
/
dragonwell8_jdk
通知
4
Star
2
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
dragonwell8_jdk
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
9b626632
编写于
12月 02, 2010
作者:
J
jrose
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
7001423: JSR 292 bytecode enhancements need unit tests
Reviewed-by: twisti
上级
4a4d0b62
变更
2
展开全部
隐藏空白更改
内联
并排
Showing
2 changed file
with
2033 addition
and
0 deletion
+2033
-0
test/java/dyn/InvokeDynamicPrintArgs.java
test/java/dyn/InvokeDynamicPrintArgs.java
+172
-0
test/java/dyn/indify/Indify.java
test/java/dyn/indify/Indify.java
+1861
-0
未找到文件。
test/java/dyn/InvokeDynamicPrintArgs.java
0 → 100644
浏览文件 @
9b626632
/*
* Copyright (c) 2010, 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.
*/
/* @test
* @summary smoke test for invokedynamic instructions
* @library indify
* @compile InvokeDynamicPrintArgs.java
* @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:+EnableInvokeDynamic
* indify.Indify
* --verify-specifier-count=3 --transitionalJSR292=false
* --expand-properties --classpath ${test.classes}
* --java InvokeDynamicPrintArgs --check-output
*/
import
java.util.*
;
import
java.io.*
;
import
java.dyn.*
;
import
static
java
.
dyn
.
MethodHandles
.*;
import
static
java
.
dyn
.
MethodType
.*;
public
class
InvokeDynamicPrintArgs
{
public
static
void
main
(
String
...
av
)
throws
Throwable
{
if
(
av
.
length
>
0
)
openBuf
();
// --check-output mode
System
.
out
.
println
(
"Printing some argument lists, starting with a empty one:"
);
INDY_nothing
().
invokeExact
();
// BSM specifier #0 = {bsm}
INDY_bar
().
invokeExact
(
"bar arg"
,
1
);
// BSM specifier #1 = {bsm2, Void.class, "void type"}
INDY_bar2
().
invokeExact
(
"bar2 arg"
,
222
);
// BSM specifier #1 = (same)
INDY_baz
().
invokeExact
(
"baz arg"
,
2
,
3.14
);
// BSM specifier #2 = {bsm2, 1234.5}
INDY_foo
().
invokeExact
(
"foo arg"
);
// BSM specifier #0 = (same)
// Hence, BSM specifier count should be 3. See "--verify-specifier-count=3" above.
System
.
out
.
println
(
"Done printing argument lists."
);
closeBuf
();
}
private
static
PrintStream
oldOut
;
private
static
ByteArrayOutputStream
buf
;
private
static
void
openBuf
()
{
oldOut
=
System
.
out
;
buf
=
new
ByteArrayOutputStream
();
System
.
setOut
(
new
PrintStream
(
buf
));
}
private
static
void
closeBuf
()
{
if
(
buf
==
null
)
return
;
System
.
out
.
flush
();
System
.
setOut
(
oldOut
);
String
[]
haveLines
=
new
String
(
buf
.
toByteArray
()).
split
(
"[\n\r]+"
);
for
(
String
line
:
haveLines
)
System
.
out
.
println
(
line
);
Iterator
<
String
>
iter
=
Arrays
.
asList
(
haveLines
).
iterator
();
for
(
String
want
:
EXPECT_OUTPUT
)
{
String
have
=
iter
.
hasNext
()
?
iter
.
next
()
:
"[EOF]"
;
if
(
want
.
equals
(
have
))
continue
;
System
.
err
.
println
(
"want line: "
+
want
);
System
.
err
.
println
(
"have line: "
+
have
);
throw
new
AssertionError
(
"unexpected output: "
+
have
);
}
if
(
iter
.
hasNext
())
throw
new
AssertionError
(
"unexpected output: "
+
iter
.
next
());
}
private
static
final
String
[]
EXPECT_OUTPUT
=
{
"Printing some argument lists, starting with a empty one:"
,
"[InvokeDynamicPrintArgs, nothing, ()void][]"
,
"[InvokeDynamicPrintArgs, bar, (java.lang.String,int)void, class java.lang.Void, void type!, 1, 234.5, 67.5, 89][bar arg, 1]"
,
"[InvokeDynamicPrintArgs, bar2, (java.lang.String,int)void, class java.lang.Void, void type!, 1, 234.5, 67.5, 89][bar2 arg, 222]"
,
"[InvokeDynamicPrintArgs, baz, (java.lang.String,int,double)void, 1234.5][baz arg, 2, 3.14]"
,
"[InvokeDynamicPrintArgs, foo, (java.lang.String)void][foo arg]"
,
"Done printing argument lists."
};
private
static
void
printArgs
(
Object
bsmInfo
,
Object
...
args
)
{
System
.
out
.
println
(
bsmInfo
+
Arrays
.
deepToString
(
args
));
}
private
static
MethodHandle
MH_printArgs
()
throws
ReflectiveOperationException
{
shouldNotCallThis
();
return
lookup
().
findStatic
(
lookup
().
lookupClass
(),
"printArgs"
,
methodType
(
void
.
class
,
Object
.
class
,
Object
[].
class
));
}
private
static
CallSite
bsm
(
Lookup
caller
,
String
name
,
MethodType
type
)
throws
ReflectiveOperationException
{
// ignore caller and name, but match the type:
Object
bsmInfo
=
Arrays
.
asList
(
caller
,
name
,
type
);
return
new
CallSite
(
MH_printArgs
().
bindTo
(
bsmInfo
).
asCollector
(
Object
[].
class
,
type
.
parameterCount
()).
asType
(
type
));
}
private
static
MethodType
MT_bsm
()
{
shouldNotCallThis
();
return
methodType
(
CallSite
.
class
,
Lookup
.
class
,
String
.
class
,
MethodType
.
class
);
}
private
static
MethodHandle
MH_bsm
()
throws
ReflectiveOperationException
{
shouldNotCallThis
();
return
lookup
().
findStatic
(
lookup
().
lookupClass
(),
"bsm"
,
MT_bsm
());
}
private
static
CallSite
bsm2
(
Lookup
caller
,
String
name
,
MethodType
type
,
Object
arg
)
throws
ReflectiveOperationException
{
// ignore caller and name, but match the type:
List
<
Object
>
bsmInfo
=
new
ArrayList
<>(
Arrays
.
asList
(
caller
,
name
,
type
));
if
(
arg
instanceof
Object
[])
bsmInfo
.
addAll
(
Arrays
.
asList
((
Object
[])
arg
));
else
bsmInfo
.
add
(
arg
);
return
new
CallSite
(
MH_printArgs
().
bindTo
(
bsmInfo
).
asCollector
(
Object
[].
class
,
type
.
parameterCount
()).
asType
(
type
));
}
private
static
MethodType
MT_bsm2
()
{
shouldNotCallThis
();
return
methodType
(
CallSite
.
class
,
Lookup
.
class
,
String
.
class
,
MethodType
.
class
,
Object
.
class
);
}
private
static
MethodHandle
MH_bsm2
()
throws
ReflectiveOperationException
{
shouldNotCallThis
();
return
lookup
().
findStatic
(
lookup
().
lookupClass
(),
"bsm2"
,
MT_bsm2
());
}
private
static
MethodHandle
INDY_nothing
()
throws
Throwable
{
shouldNotCallThis
();
return
((
CallSite
)
MH_bsm
().
invokeGeneric
(
lookup
(),
"nothing"
,
methodType
(
void
.
class
)
)).
dynamicInvoker
();
}
private
static
MethodHandle
INDY_foo
()
throws
Throwable
{
shouldNotCallThis
();
return
((
CallSite
)
MH_bsm
().
invokeGeneric
(
lookup
(),
"foo"
,
methodType
(
void
.
class
,
String
.
class
)
)).
dynamicInvoker
();
}
private
static
MethodHandle
INDY_bar
()
throws
Throwable
{
shouldNotCallThis
();
return
((
CallSite
)
MH_bsm2
().
invokeGeneric
(
lookup
(),
"bar"
,
methodType
(
void
.
class
,
String
.
class
,
int
.
class
)
,
new
Object
[]
{
Void
.
class
,
"void type!"
,
1
,
234.5
F
,
67.5
,
(
long
)
89
}
)).
dynamicInvoker
();
}
private
static
MethodHandle
INDY_bar2
()
throws
Throwable
{
shouldNotCallThis
();
return
((
CallSite
)
MH_bsm2
().
invokeGeneric
(
lookup
(),
"bar2"
,
methodType
(
void
.
class
,
String
.
class
,
int
.
class
)
,
new
Object
[]
{
Void
.
class
,
"void type!"
,
1
,
234.5
F
,
67.5
,
(
long
)
89
}
)).
dynamicInvoker
();
}
private
static
MethodHandle
INDY_baz
()
throws
Throwable
{
shouldNotCallThis
();
return
((
CallSite
)
MH_bsm2
().
invokeGeneric
(
lookup
(),
"baz"
,
methodType
(
void
.
class
,
String
.
class
,
int
.
class
,
double
.
class
)
,
1234.5
)).
dynamicInvoker
();
}
private
static
void
shouldNotCallThis
()
{
// if this gets called, the transformation has not taken place
if
(
System
.
getProperty
(
"InvokeDynamicPrintArgs.allow-untransformed"
)
!=
null
)
return
;
throw
new
AssertionError
(
"this code should be statically transformed away by Indify"
);
}
}
test/java/dyn/indify/Indify.java
0 → 100644
浏览文件 @
9b626632
此差异已折叠。
点击以展开。
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录