Skip to content

Commit 7af7774

Browse files
committed
优化了Var的实现逻辑,移除冗余注释和代码
1 parent f3099a8 commit 7af7774

27 files changed

+253
-343
lines changed
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
package top.mcfpp.lang
2+
3+
import top.mcfpp.lang.type.MCFPPType
4+
import top.mcfpp.lang.value.MCFPPValue
5+
import top.mcfpp.model.Member
6+
import top.mcfpp.model.function.Function
7+
import java.util.UUID
8+
import javax.xml.crypto.Data
9+
10+
class Accessor(override var value: Var<*>, identifier: String = UUID.randomUUID().toString()) : Var<Accessor>(identifier), MCFPPValue<Var<*>> {
11+
12+
override fun implicitCast(type: MCFPPType): Var<*> {
13+
return value.implicitCast(type)
14+
}
15+
16+
override fun clone(): Accessor {
17+
return Accessor(value.clone(), identifier)
18+
}
19+
20+
override fun getTempVar(): Accessor {
21+
return Accessor(value.getTempVar())
22+
}
23+
24+
override fun storeToStack() {
25+
value.storeToStack()
26+
}
27+
28+
override fun getFromStack() {
29+
value.getFromStack()
30+
}
31+
32+
override fun getMemberVar(key: String, accessModifier: Member.AccessModifier): Pair<Var<*>?, Boolean> {
33+
return value.getMemberVar(key, accessModifier)
34+
}
35+
36+
override fun getMemberFunction(
37+
key: String,
38+
readOnlyParams: List<MCFPPType>,
39+
normalParams: List<MCFPPType>,
40+
accessModifier: Member.AccessModifier
41+
): Pair<Function, Boolean> {
42+
return value.getMemberFunction(key, readOnlyParams, normalParams, accessModifier)
43+
}
44+
45+
override fun explicitCast(type: MCFPPType): Var<*> {
46+
return value.explicitCast(type)
47+
}
48+
49+
override fun onAssign(b: Var<*>): Accessor {
50+
TODO()
51+
}
52+
53+
override fun toDynamic(replace: Boolean): Var<*> {
54+
return if(value is MCFPPValue<*>) {
55+
(value as MCFPPValue<*>).toDynamic(replace)
56+
} else {
57+
value
58+
}
59+
}
60+
61+
}

src/main/kotlin/top/mcfpp/lang/ClassPointer.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ import java.util.*
3535
* @see Class 类的核心实现
3636
* @see top.mcfpp.lang.type.MCFPPClassType 表示类的类型,同时也是类的静态成员的指针
3737
*/
38-
class ClassPointer : Var<Int>{
38+
class ClassPointer : Var<ClassPointer>{
3939

4040
/**
4141
* 指针对应的类的类型
@@ -87,7 +87,7 @@ class ClassPointer : Var<Int>{
8787
@Override
8888
@InsertCommand
8989
@Throws(VariableConverseException::class)
90-
override fun assign(b: Var<*>): ClassPointer {
90+
override fun onAssign(b: Var<*>): ClassPointer {
9191
var v = b.implicitCast(this.type)
9292
if(!v.isError){
9393
v = b
@@ -204,7 +204,7 @@ class ClassPointer : Var<Int>{
204204
* @return 一个此变量生成的临时变量
205205
*/
206206
@Override
207-
override fun getTempVar(): Var<*> {
207+
override fun getTempVar(): ClassPointer {
208208
return this
209209
}
210210

src/main/kotlin/top/mcfpp/lang/DataTemplateObject.kt

Lines changed: 50 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,13 @@ import top.mcfpp.model.field.CompoundDataField
1616
import top.mcfpp.model.function.Function
1717
import top.mcfpp.model.function.UnknownFunction
1818
import top.mcfpp.util.LogProcessor
19+
import top.mcfpp.util.NBTUtil
1920
import java.util.*
2021

21-
open class DataTemplateObject : Var<CompoundTag> {
22+
/**
23+
* 一个数据模板对象
24+
*/
25+
open class DataTemplateObject : Var<DataTemplateObject> {
2226

2327
val templateType
2428
get() = (type as MCFPPDataTemplateType).template
@@ -47,7 +51,7 @@ open class DataTemplateObject : Var<CompoundTag> {
4751
}
4852

4953

50-
override fun assign(b: Var<*>): Var<CompoundTag> {
54+
override fun onAssign(b: Var<*>): DataTemplateObject {
5155
var v = b.implicitCast(this.type)
5256
if(!v.isError){
5357
v = b
@@ -90,7 +94,7 @@ open class DataTemplateObject : Var<CompoundTag> {
9094
}
9195
}
9296

93-
fun assignMembers(tag: CompoundTag){
97+
private fun assignMembers(tag: CompoundTag){
9498
instanceField.forEachVar {
9599
it.replacedBy(it.assign(NBTBasedDataConcrete(tag.get(it.identifier))))
96100
}
@@ -100,7 +104,7 @@ open class DataTemplateObject : Var<CompoundTag> {
100104
if(parentClass() != null){
101105
//是成员
102106
//TODO 选择两个实体的代价和复制整个模板数据的代价谁更大?
103-
val b = if(obj.parentClass() != null) obj.getTempVar() as DataTemplateObject else obj
107+
val b = if(obj.parentClass() != null) obj.getTempVar() else obj
104108
val c = Commands.selectRun(parent!!, Command("data modify $nbtPath set from ${b.nbtPath}"))
105109
Function.addCommands(c)
106110
}else{
@@ -156,11 +160,11 @@ open class DataTemplateObject : Var<CompoundTag> {
156160
}
157161
}
158162

159-
override fun clone(): Var<*> {
163+
override fun clone(): DataTemplateObject {
160164
return DataTemplateObject(this)
161165
}
162166

163-
override fun getTempVar(): Var<*> {
167+
override fun getTempVar(): DataTemplateObject {
164168
if(isTemp) return this
165169
val re = DataTemplateObject(templateType)
166170
re.isTemp = true
@@ -196,6 +200,46 @@ open class DataTemplateObject : Var<CompoundTag> {
196200
}
197201
}
198202

203+
override fun onMemberChanged(member: Member) {
204+
if(member is MCFPPValue<*> && isConcrete()){
205+
this.replacedBy(this.toConcrete())
206+
}
207+
}
208+
209+
fun isConcrete(): Boolean{
210+
if(this is DataTemplateObjectConcrete) return true
211+
var re = true
212+
instanceField.forEachVar {
213+
run@{
214+
if(it is DataTemplateObject){
215+
if(!it.isConcrete()) {
216+
re = false
217+
return@run
218+
}
219+
}else{
220+
if (it !is MCFPPValue<*>) {
221+
re = false
222+
return@run
223+
}
224+
}
225+
}
226+
}
227+
return re
228+
}
229+
230+
fun toConcrete(): DataTemplateObjectConcrete {
231+
if (this is DataTemplateObjectConcrete) return this
232+
val compoundTag = CompoundTag()
233+
instanceField.forEachVar {
234+
if(it is DataTemplateObject){
235+
compoundTag.put(it.identifier, it.toConcrete().value)
236+
}else{
237+
compoundTag.put(it.identifier, NBTUtil.toNBT(it))
238+
}
239+
}
240+
return DataTemplateObjectConcrete(this, compoundTag)
241+
}
242+
199243
companion object{
200244
}
201245

src/main/kotlin/top/mcfpp/lang/EntityVar.kt

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -69,12 +69,7 @@ open class EntityVar : NBTBasedData<IntArrayTag>{
6969
return SelectorVar.data.getFunction(key, readOnlyParams, normalParams) to true
7070
}
7171

72-
73-
/**
74-
* 将b中的值赋值给此实体变量
75-
* @param b 变量的对象
76-
*/
77-
override fun assign(b: Var<*>): EntityVar {
72+
override fun onAssign(b: Var<*>): EntityVar {
7873
var v = b.implicitCast(this.type)
7974
if(!v.isError){
8075
v = b

src/main/kotlin/top/mcfpp/lang/EnumVar.kt

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ import top.mcfpp.util.TextTranslator
1818
import top.mcfpp.util.TextTranslator.translate
1919
import java.util.*
2020

21-
open class EnumVar : Var<Int> {
21+
open class EnumVar : Var<EnumVar> {
2222

2323
var sbObject: SbObject = SbObject.MCFPP_default
2424

@@ -61,15 +61,15 @@ open class EnumVar : Var<Int> {
6161
type = enum.getType()
6262
}
6363

64-
override fun assign(b: Var<*>): Var<Int> {
64+
override fun onAssign(b: Var<*>): EnumVar {
6565
var v = b.implicitCast(this.type)
6666
if(!v.isError){
6767
v = b
6868
}
6969
hasAssigned = true
7070
return when(v){
7171
is EnumVar -> {
72-
val i = this.getIntVar().assign(v.getIntVar())
72+
val i = this.getIntVar().assign(v.getIntVar()) as MCInt
7373
if(i is MCIntConcrete) EnumVarConcrete(i, enum)
7474
else EnumVar(i, enum)
7575
}
@@ -80,11 +80,11 @@ open class EnumVar : Var<Int> {
8080
}
8181
}
8282

83-
override fun clone(): Var<*> {
83+
override fun clone(): EnumVar {
8484
return EnumVar(this)
8585
}
8686

87-
override fun getTempVar(): Var<*> {
87+
override fun getTempVar(): EnumVar {
8888
if (isTemp) return this
8989
val re = EnumVar(enum)
9090
re.isTemp = true
@@ -227,7 +227,7 @@ class EnumVarConcrete : EnumVar, MCFPPValue<Int>{
227227
*/
228228
@Override
229229
@InsertCommand
230-
override fun getTempVar(): Var<*> {
230+
override fun getTempVar(): EnumVar {
231231
if (isTemp) return this
232232
return EnumVarConcrete(enum ,value)
233233
}

src/main/kotlin/top/mcfpp/lang/JavaVar.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ import kotlin.reflect.full.memberProperties
2929
* @constructor Create empty Java var
3030
*/
3131

32-
class JavaVar : Var<Any>, MCFPPValue<Any?>{
32+
class JavaVar : Var<JavaVar>, MCFPPValue<Any?>{
3333

3434
override var value : Any? = null
3535

@@ -69,7 +69,7 @@ class JavaVar : Var<Any>, MCFPPValue<Any?>{
6969
* 将b中的值赋值给此变量
7070
* @param b 变量的对象
7171
*/
72-
override fun assign(b: Var<*>): Var<Any> {
72+
override fun onAssign(b: Var<*>): JavaVar {
7373
var v = b.implicitCast(this.type)
7474
if(!v.isError){
7575
v = b
@@ -95,7 +95,7 @@ class JavaVar : Var<Any>, MCFPPValue<Any?>{
9595
*
9696
* @return
9797
*/
98-
override fun getTempVar(): Var<*> { return this }
98+
override fun getTempVar(): JavaVar = this
9999

100100
override fun storeToStack() {}
101101

@@ -204,7 +204,7 @@ class JavaVar : Var<Any>, MCFPPValue<Any?>{
204204
is NBTListConcrete<*> -> v.value.toJava()
205205
is NBTMapConcrete -> (v.value["data"] as CompoundTag).toJava()
206206
is NBTDictionaryConcrete -> v.value.toJava()
207-
is NBTBasedDataConcrete -> v.value
207+
is NBTBasedDataConcrete<*> -> v.value
208208
else -> v
209209
}!!
210210
}

src/main/kotlin/top/mcfpp/lang/JsonText.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ open class JsonText : NBTBasedData<CompoundTag> {
5151
*/
5252
constructor(b: JsonText) : super(b)
5353

54-
override fun assign(b: Var<*>): NBTBasedData<CompoundTag> {
54+
override fun onAssign(b: Var<*>): NBTBasedData<CompoundTag> {
5555
var v = b.implicitCast(this.type)
5656
if(!v.isError){
5757
v = b
@@ -68,10 +68,10 @@ open class JsonText : NBTBasedData<CompoundTag> {
6868
return JsonText(this)
6969
}
7070

71-
override fun getTempVar(): Var<*> {
71+
override fun getTempVar(): JsonText {
7272
val temp = JsonText()
7373
temp.isTemp = true
74-
return temp.assignCommand(this)
74+
return temp.assignCommand(this) as JsonText
7575
}
7676

7777
override fun getByIndex(index: Var<*>): NBTBasedData<*> {

src/main/kotlin/top/mcfpp/lang/MCAny.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ import java.util.*
5959
*
6060
* @constructor Create empty MCAny
6161
*/
62-
open class MCAny : Var<Var<*>> {
62+
open class MCAny : Var<MCAny> {
6363

6464
override var type: MCFPPType = MCFPPBaseType.Any
6565

@@ -94,7 +94,7 @@ open class MCAny : Var<Var<*>> {
9494
*
9595
* @return 重新获取跟踪的此变量
9696
*/
97-
override fun assign(b: Var<*>) : MCAnyConcrete {
97+
override fun onAssign(b: Var<*>) : MCAnyConcrete {
9898
var v = b.implicitCast(this.type)
9999
if(!v.isError){
100100
v = b
@@ -141,7 +141,7 @@ open class MCAny : Var<Var<*>> {
141141
*
142142
* @return
143143
*/
144-
override fun getTempVar(): Var<*> {
144+
override fun getTempVar(): MCAny {
145145
return this
146146
}
147147

@@ -249,7 +249,7 @@ class MCAnyConcrete : MCAny, MCFPPValue<Var<*>>{
249249
return MCAnyConcrete(this)
250250
}
251251

252-
override fun assign(b: Var<*>): MCAnyConcrete {
252+
override fun onAssign(b: Var<*>): MCAnyConcrete {
253253
when (b) {
254254
is MCAnyConcrete -> {
255255
if(b.value.type != this.value.type){

src/main/kotlin/top/mcfpp/lang/MCBool.kt

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ import top.mcfpp.util.TextTranslator.translate
2121
*
2222
* bool型变量实现了多种计算方法,比如与,或,非等基本的逻辑运算。
2323
*/
24-
open class MCBool : Var<Boolean>, OnScoreboard {
24+
open class MCBool : Var<MCBool>, OnScoreboard {
2525
/**
2626
* 此bool变量依托的记分板
2727
*/
@@ -52,7 +52,7 @@ open class MCBool : Var<Boolean>, OnScoreboard {
5252
override var type: MCFPPType = MCFPPBaseType.Bool
5353

5454
@Override
55-
override fun assign(b: Var<*>) : MCBool {
55+
override fun onAssign(b: Var<*>) : MCBool {
5656
var v = b.implicitCast(this.type)
5757
if(!v.isError){
5858
v = b
@@ -224,13 +224,6 @@ open class MCBool : Var<Boolean>, OnScoreboard {
224224
TODO("Not yet implemented")
225225
}
226226

227-
/**
228-
* 根据标识符获取一个成员。
229-
*
230-
* @param key 成员的mcfpp标识符
231-
* @param accessModifier 访问者的访问权限
232-
* @return 返回一个值对。第一个值是成员变量或null(如果成员变量不存在),第二个值是访问者是否能够访问此变量。
233-
*/
234227
override fun getMemberVar(key: String, accessModifier: Member.AccessModifier): Pair<Var<*>?, Boolean> {
235228
TODO("Not yet implemented")
236229
}

0 commit comments

Comments
 (0)