Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
硅谷海盗
kotlin
提交
e74ea049
K
kotlin
项目概览
硅谷海盗
/
kotlin
与 Fork 源项目一致
从无法访问的项目Fork
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
K
kotlin
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
e74ea049
编写于
4月 15, 2011
作者:
D
Dmitry Jemerov
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
elvis for primitive types; unboxing support
上级
023a6794
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
44 addition
and
1 deletion
+44
-1
idea/src/org/jetbrains/jet/codegen/ExpressionCodegen.java
idea/src/org/jetbrains/jet/codegen/ExpressionCodegen.java
+7
-1
idea/src/org/jetbrains/jet/codegen/StackValue.java
idea/src/org/jetbrains/jet/codegen/StackValue.java
+30
-0
idea/tests/org/jetbrains/jet/codegen/NamespaceGenTest.java
idea/tests/org/jetbrains/jet/codegen/NamespaceGenTest.java
+7
-0
未找到文件。
idea/src/org/jetbrains/jet/codegen/ExpressionCodegen.java
浏览文件 @
e74ea049
...
...
@@ -62,6 +62,10 @@ public class ExpressionCodegen extends JetVisitor {
}
}
private
void
genToStack
(
JetExpression
expr
)
{
gen
(
expr
,
expressionType
(
expr
));
}
@Override
public
void
visitExpression
(
JetExpression
expression
)
{
throw
new
UnsupportedOperationException
(
"Codegen for "
+
expression
+
" is not yet implemented"
);
...
...
@@ -621,11 +625,13 @@ public class ExpressionCodegen extends JetVisitor {
private
void
generateElvis
(
JetBinaryExpression
expression
)
{
final
Type
exprType
=
expressionType
(
expression
);
gen
(
expression
.
getLeft
(),
exprType
);
final
Type
leftType
=
expressionType
(
expression
.
getLeft
());
gen
(
expression
.
getLeft
(),
leftType
);
v
.
dup
();
Label
end
=
new
Label
();
Label
ifNull
=
new
Label
();
v
.
ifnull
(
ifNull
);
StackValue
.
onStack
(
leftType
).
put
(
exprType
,
v
);
v
.
goTo
(
end
);
v
.
mark
(
ifNull
);
v
.
pop
();
...
...
idea/src/org/jetbrains/jet/codegen/StackValue.java
浏览文件 @
e74ea049
...
...
@@ -69,10 +69,40 @@ public abstract class StackValue {
}
}
private
static
void
unbox
(
final
Type
type
,
InstructionAdapter
v
)
{
if
(
type
==
Type
.
INT_TYPE
)
{
v
.
invokevirtual
(
"java/lang/Number"
,
"intValue"
,
"()I"
);
}
else
if
(
type
==
Type
.
BOOLEAN_TYPE
)
{
v
.
invokevirtual
(
"java/lang/Boolean"
,
"booleanValue"
,
"()Z"
);
}
else
if
(
type
==
Type
.
CHAR_TYPE
)
{
v
.
invokevirtual
(
"java/lang/Character"
,
"charValue"
,
"()C"
);
}
else
if
(
type
==
Type
.
SHORT_TYPE
)
{
v
.
invokevirtual
(
"java/lang/Number"
,
"shortValue"
,
"()S"
);
}
else
if
(
type
==
Type
.
LONG_TYPE
)
{
v
.
invokevirtual
(
"java/lang/Number"
,
"longValue"
,
"()J"
);
}
else
if
(
type
==
Type
.
BYTE_TYPE
)
{
v
.
invokevirtual
(
"java/lang/Number"
,
"byteValue"
,
"()B"
);
}
else
if
(
type
==
Type
.
FLOAT_TYPE
)
{
v
.
invokevirtual
(
"java/lang/Number"
,
"floatValue"
,
"()F"
);
}
else
if
(
type
==
Type
.
DOUBLE_TYPE
)
{
v
.
invokevirtual
(
"java/lang/Number"
,
"doubleValue"
,
"()D"
);
}
}
protected
void
coerce
(
Type
type
,
InstructionAdapter
v
)
{
if
(
type
.
getSort
()
==
Type
.
OBJECT
)
{
box
(
this
.
type
,
v
);
}
else
if
(
this
.
type
.
getSort
()
==
Type
.
OBJECT
&&
type
.
getSort
()
<=
Type
.
DOUBLE
)
{
unbox
(
type
,
v
);
}
else
if
(
type
!=
this
.
type
)
{
v
.
cast
(
this
.
type
,
type
);
}
...
...
idea/tests/org/jetbrains/jet/codegen/NamespaceGenTest.java
浏览文件 @
e74ea049
...
...
@@ -275,6 +275,13 @@ public class NamespaceGenTest extends CodegenTestCase {
assertEquals
(
"null"
,
main
.
invoke
(
null
,
new
Object
[]
{
null
}));
}
public
void
testElvisInt
()
throws
Exception
{
loadText
(
"fun foo(a: Int?): Int = a ?: 239"
);
final
Method
main
=
generateFunction
();
assertEquals
(
610
,
main
.
invoke
(
null
,
610
));
assertEquals
(
239
,
main
.
invoke
(
null
,
new
Object
[]{
null
}));
}
public
void
_testVarargs
()
throws
Exception
{
loadText
(
"fun foo() = java.util.Arrays.asList(\"IntelliJ\", \"IDEA\")"
);
final
Method
main
=
generateFunction
();
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录