Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
硅谷海盗
kotlin
提交
cc8d263f
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,发现更多精彩内容 >>
提交
cc8d263f
编写于
2月 21, 2012
作者:
A
Alex Tkachman
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
preliminary support for intrinsics in std lib. javaClass<T>
上级
2796c914
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
62 addition
and
5 deletion
+62
-5
compiler/backend/src/org/jetbrains/jet/codegen/intrinsics/IntrinsicMethods.java
...rg/jetbrains/jet/codegen/intrinsics/IntrinsicMethods.java
+1
-1
compiler/backend/src/org/jetbrains/jet/codegen/intrinsics/JavaClassFunction.java
...g/jetbrains/jet/codegen/intrinsics/JavaClassFunction.java
+47
-0
compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaDescriptorResolver.java
...tbrains/jet/lang/resolve/java/JavaDescriptorResolver.java
+9
-2
compiler/testData/codegen/regressions/kt715.kt
compiler/testData/codegen/regressions/kt715.kt
+3
-0
stdlib/ktSrc/JavaLang.kt
stdlib/ktSrc/JavaLang.kt
+2
-2
未找到文件。
compiler/backend/src/org/jetbrains/jet/codegen/intrinsics/IntrinsicMethods.java
浏览文件 @
cc8d263f
...
...
@@ -72,7 +72,7 @@ public class IntrinsicMethods {
myProject
=
project
;
myStdLib
=
stdlib
;
namedMethods
.
put
(
"
std.javaClass.property"
,
new
JavaClassProperty
());
namedMethods
.
put
(
"
\"std.javaClass.function\""
,
new
JavaClassFunction
());
List
<
String
>
primitiveCastMethods
=
OperatorConventions
.
NUMBER_CONVERSIONS
.
asList
();
for
(
String
method
:
primitiveCastMethods
)
{
...
...
compiler/backend/src/org/jetbrains/jet/codegen/intrinsics/JavaClassFunction.java
0 → 100644
浏览文件 @
cc8d263f
/*
* Copyright 2000-2012 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
org.jetbrains.jet.codegen.intrinsics
;
import
com.intellij.psi.PsiElement
;
import
org.jetbrains.annotations.Nullable
;
import
org.jetbrains.jet.codegen.ExpressionCodegen
;
import
org.jetbrains.jet.codegen.StackValue
;
import
org.jetbrains.jet.lang.descriptors.CallableDescriptor
;
import
org.jetbrains.jet.lang.psi.JetCallExpression
;
import
org.jetbrains.jet.lang.psi.JetExpression
;
import
org.jetbrains.jet.lang.resolve.BindingContext
;
import
org.jetbrains.jet.lang.resolve.calls.ResolvedCall
;
import
org.jetbrains.jet.lang.types.TypeProjection
;
import
org.objectweb.asm.Type
;
import
org.objectweb.asm.commons.InstructionAdapter
;
import
java.util.List
;
/**
* @author alex.tkachman
*/
public
class
JavaClassFunction
implements
IntrinsicMethod
{
@Override
public
StackValue
generate
(
ExpressionCodegen
codegen
,
InstructionAdapter
v
,
Type
expectedType
,
@Nullable
PsiElement
element
,
@Nullable
List
<
JetExpression
>
arguments
,
StackValue
receiver
)
{
JetCallExpression
call
=
(
JetCallExpression
)
element
;
ResolvedCall
<?
extends
CallableDescriptor
>
resolvedCall
=
codegen
.
getBindingContext
().
get
(
BindingContext
.
RESOLVED_CALL
,
call
.
getCalleeExpression
());
CallableDescriptor
resultingDescriptor
=
resolvedCall
.
getResultingDescriptor
();
Type
type
=
codegen
.
getTypeMapper
().
mapType
(
resultingDescriptor
.
getReturnType
().
getArguments
().
get
(
0
).
getType
());
v
.
aconst
(
type
);
return
StackValue
.
onStack
(
type
);
}
}
compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaDescriptorResolver.java
浏览文件 @
cc8d263f
...
...
@@ -34,7 +34,7 @@ import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor;
import
org.jetbrains.jet.lang.resolve.BindingContext
;
import
org.jetbrains.jet.lang.resolve.DescriptorUtils
;
import
org.jetbrains.jet.lang.resolve.OverrideResolver
;
import
org.jetbrains.jet.lang.resolve.constants.
CompileTimeConstant
;
import
org.jetbrains.jet.lang.resolve.constants.
*
;
import
org.jetbrains.jet.lang.resolve.java.alt.AltClassFinder
;
import
org.jetbrains.jet.lang.resolve.java.kt.JetClassAnnotation
;
import
org.jetbrains.jet.lang.types.*
;
...
...
@@ -1425,7 +1425,14 @@ public class JavaDescriptorResolver {
return
null
;
}
annotation
.
setAnnotationType
(
clazz
.
getDefaultType
());
annotation
.
setValueArguments
(
new
ArrayList
<
CompileTimeConstant
<?>>());
// TODO
ArrayList
<
CompileTimeConstant
<?>>
valueArguments
=
new
ArrayList
<
CompileTimeConstant
<?>>();
if
(
"jet.runtime.Intrinsic"
.
equals
(
psiAnnotation
.
getQualifiedName
()))
{
// temporary hack
valueArguments
.
add
(
new
StringValue
(
psiAnnotation
.
findAttributeValue
(
"value"
).
getText
()));
annotation
.
setValueArguments
(
valueArguments
);
// TODO
}
else
annotation
.
setValueArguments
(
valueArguments
);
// TODO
return
annotation
;
}
...
...
compiler/testData/codegen/regressions/kt715.kt
浏览文件 @
cc8d263f
...
...
@@ -2,7 +2,10 @@ import std.*
val
test
=
"lala"
.
javaClass
val
test2
=
javaClass
<
Iterator
<
Int
>>
()
fun
box
():
String
{
if
(
test
.
getCanonicalName
()
!=
"java.lang.String"
)
return
"fail"
if
(
test2
.
getCanonicalName
()
!=
"jet.Iterator"
)
return
"fail"
return
"OK"
}
\ No newline at end of file
stdlib/ktSrc/JavaLang.kt
浏览文件 @
cc8d263f
...
...
@@ -5,7 +5,7 @@ import java.lang.Object
import
jet.runtime.Intrinsic
val
<
T
>
T
.
javaClass
:
Class
<
T
>
val
<
out
T
>
T
.
javaClass
:
Class
<
T
>
[Intrinsic("std.javaClass.property")]
get
()
=
(
this
as
java
.
lang
.
Object
).
getClass
()
as
Class
<
T
>
[Intrinsic("std.javaClass.function")]
fun
<
T
>
javaClass
()
:
Class
<
T
>
=
null
as
Class
<
T
>
[Intrinsic("std.javaClass.function")]
fun
<
out
T
>
javaClass
()
:
Class
<
T
>
=
null
as
Class
<
T
>
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录