Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
硅谷海盗
kotlin
提交
d9271b54
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,发现更多精彩内容 >>
提交
d9271b54
编写于
12月 22, 2016
作者:
D
Dmitry Petrov
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Fix IR generation: temporary variable in 'hashCode()' for data class should be 'var'
上级
514fc029
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
15 addition
and
8 deletion
+15
-8
compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/builders/ExpressionHelpers.kt
...org/jetbrains/kotlin/psi2ir/builders/ExpressionHelpers.kt
+6
-0
compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/DataClassMembersGenerator.kt
...ins/kotlin/psi2ir/generators/DataClassMembersGenerator.kt
+1
-1
compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/Scope.kt
...si2ir/src/org/jetbrains/kotlin/psi2ir/generators/Scope.kt
+4
-4
compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/descriptors/IrTemporaryVariableDescriptor.kt
...ns/kotlin/ir/descriptors/IrTemporaryVariableDescriptor.kt
+3
-2
compiler/testData/ir/irText/classes/dataClasses.txt
compiler/testData/ir/irText/classes/dataClasses.txt
+1
-1
未找到文件。
compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/builders/ExpressionHelpers.kt
浏览文件 @
d9271b54
...
...
@@ -48,6 +48,12 @@ fun <T : IrElement> IrStatementsBuilder<T>.defineTemporary(value: IrExpression,
return
temporary
.
descriptor
}
fun
<
T
:
IrElement
>
IrStatementsBuilder
<
T
>.
defineTemporaryVar
(
value
:
IrExpression
,
nameHint
:
String
?
=
null
):
VariableDescriptor
{
val
temporary
=
scope
.
createTemporaryVariable
(
value
,
nameHint
,
isMutable
=
true
)
+
temporary
return
temporary
.
descriptor
}
fun
IrBuilderWithScope
.
irReturn
(
value
:
IrExpression
)
=
IrReturnImpl
(
startOffset
,
endOffset
,
context
.
builtIns
.
nothingType
,
scope
.
assertCastOwner
(),
value
)
...
...
compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/DataClassMembersGenerator.kt
浏览文件 @
d9271b54
...
...
@@ -103,7 +103,7 @@ class DataClassMembersGenerator(
override
fun
generateHashCodeMethod
(
function
:
FunctionDescriptor
,
properties
:
List
<
PropertyDescriptor
>)
{
buildMember
(
function
)
{
val
result
=
defineTemporary
(
irInt
(
0
),
"result"
)
val
result
=
defineTemporary
Var
(
irInt
(
0
),
"result"
)
var
first
=
true
for
(
property
in
properties
)
{
val
hashCodeOfProperty
=
getHashCodeOfProperty
(
irThis
(),
property
)
...
...
compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/Scope.kt
浏览文件 @
d9271b54
...
...
@@ -30,18 +30,18 @@ class Scope(val scopeOwner: DeclarationDescriptor) {
private
var
lastTemporaryIndex
:
Int
=
0
private
fun
nextTemporaryIndex
():
Int
=
lastTemporaryIndex
++
private
fun
createDescriptorForTemporaryVariable
(
type
:
KotlinType
,
nameHint
:
String
?
=
null
):
IrTemporaryVariableDescriptor
=
IrTemporaryVariableDescriptorImpl
(
scopeOwner
,
Name
.
identifier
(
getNameForTemporary
(
nameHint
)),
type
)
private
fun
createDescriptorForTemporaryVariable
(
type
:
KotlinType
,
nameHint
:
String
?
=
null
,
isMutable
:
Boolean
=
false
):
IrTemporaryVariableDescriptor
=
IrTemporaryVariableDescriptorImpl
(
scopeOwner
,
Name
.
identifier
(
getNameForTemporary
(
nameHint
)),
type
,
isMutable
)
private
fun
getNameForTemporary
(
nameHint
:
String
?):
String
{
val
index
=
nextTemporaryIndex
()
return
if
(
nameHint
!=
null
)
"tmp${index}_$nameHint"
else
"tmp$index"
}
fun
createTemporaryVariable
(
irExpression
:
IrExpression
,
nameHint
:
String
?
=
null
):
IrVariable
=
fun
createTemporaryVariable
(
irExpression
:
IrExpression
,
nameHint
:
String
?
=
null
,
isMutable
:
Boolean
=
false
):
IrVariable
=
IrVariableImpl
(
irExpression
.
startOffset
,
irExpression
.
endOffset
,
IrDeclarationOrigin
.
IR_TEMPORARY_VARIABLE
,
createDescriptorForTemporaryVariable
(
irExpression
.
type
,
nameHint
),
createDescriptorForTemporaryVariable
(
irExpression
.
type
,
nameHint
,
isMutable
),
irExpression
)
}
compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/descriptors/IrTemporaryVariableDescriptor.kt
浏览文件 @
d9271b54
...
...
@@ -29,7 +29,8 @@ interface IrTemporaryVariableDescriptor : VariableDescriptor
class
IrTemporaryVariableDescriptorImpl
(
containingDeclaration
:
DeclarationDescriptor
,
name
:
Name
,
outType
:
KotlinType
outType
:
KotlinType
,
private
val
isMutable
:
Boolean
=
false
):
VariableDescriptorImpl
(
containingDeclaration
,
Annotations
.
EMPTY
,
name
,
outType
,
SourceElement
.
NO_SOURCE
),
IrTemporaryVariableDescriptor
{
...
...
@@ -41,7 +42,7 @@ class IrTemporaryVariableDescriptorImpl(
throw
UnsupportedOperationException
(
"Temporary variable descriptor shouldn't be substituted (so far): $this"
)
}
override
fun
isVar
():
Boolean
=
fals
e
override
fun
isVar
():
Boolean
=
isMutabl
e
override
fun
<
R
,
D
>
accept
(
visitor
:
DeclarationDescriptorVisitor
<
R
,
D
>,
data
:
D
):
R
=
visitor
.
visitVariableDescriptor
(
this
,
data
)
...
...
compiler/testData/ir/irText/classes/dataClasses.txt
浏览文件 @
d9271b54
...
...
@@ -72,7 +72,7 @@ FILE /dataClasses.kt
CONST String type=kotlin.String value=')'
FUN GENERATED_DATA_CLASS_MEMBER public open override fun hashCode(): kotlin.Int
BLOCK_BODY
VAR IR_TEMPORARY_VARIABLE va
l
tmp0_result: kotlin.Int
VAR IR_TEMPORARY_VARIABLE va
r
tmp0_result: kotlin.Int
CONST Int type=kotlin.Int value='0'
SET_VAR 'tmp0_result: Int' type=kotlin.Unit origin=EQ
CALL 'hashCode(): Int' type=kotlin.Int origin=null
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录