Skip to content

Commit d0ee6c9

Browse files
committed
fix a goddamn stack overflow when serializing a dictionary
also added missing methods to ScriptVariable and fixed wrong serializer used for booleans
1 parent 1935949 commit d0ee6c9

File tree

3 files changed

+32
-9
lines changed

3 files changed

+32
-9
lines changed

src/main/java/io/github/techstreet/dfscript/script/ScriptManager.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121
import io.github.techstreet.dfscript.script.options.ScriptNamedOption;
2222
import io.github.techstreet.dfscript.script.repetitions.ScriptBuiltinRepetition;
2323
import io.github.techstreet.dfscript.script.repetitions.ScriptWhile;
24-
import io.github.techstreet.dfscript.script.util.ScriptValueJson;
2524
import io.github.techstreet.dfscript.script.values.*;
2625
import io.github.techstreet.dfscript.util.FileUtil;
2726
import io.github.techstreet.dfscript.util.chat.ChatType;
@@ -77,7 +76,8 @@ public class ScriptManager implements Loadable {
7776
.registerTypeAdapter(ScriptTextValue.class, new ScriptTextValue.Serializer())
7877
.registerTypeAdapter(ScriptListValue.class, new ScriptListValue.Serializer())
7978
.registerTypeAdapter(ScriptDictionaryValue.class, new ScriptDictionaryValue.Serializer())
80-
.registerTypeAdapter(ScriptBoolValue.class, new ScriptDictionaryValue.Serializer())
79+
.registerTypeAdapter(ScriptBoolValue.class, new ScriptBoolValue.Serializer())
80+
.registerTypeAdapter(ScriptVariable.class, new ScriptVariable.Serializer())
8181
.create();
8282

8383
public ScriptManager() {

src/main/java/io/github/techstreet/dfscript/script/values/ScriptDictionaryValue.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,7 @@
33
import com.google.gson.*;
44

55
import java.lang.reflect.Type;
6-
import java.util.ArrayList;
76
import java.util.HashMap;
8-
import java.util.List;
97
import java.util.Map;
108

119
public class ScriptDictionaryValue extends ScriptValue {
@@ -89,7 +87,7 @@ public JsonElement serialize(ScriptDictionaryValue scriptValue, Type type, JsonS
8987
dictObj.add(key, context.serialize(dict.get(key)));
9088
}
9189
JsonObject obj = new JsonObject();
92-
obj.add("dict", obj);
90+
obj.add("dict", dictObj);
9391
obj.addProperty("___objectType", "dict");
9492
return obj;
9593
}

src/main/java/io/github/techstreet/dfscript/script/values/ScriptVariable.java

Lines changed: 29 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,10 @@
11
package io.github.techstreet.dfscript.script.values;
22

3-
import io.github.techstreet.dfscript.script.values.ScriptUnknownValue;
4-
import io.github.techstreet.dfscript.script.values.ScriptValue;
3+
import com.google.gson.*;
54

5+
import java.lang.reflect.Type;
66
import java.util.HashMap;
77
import java.util.List;
8-
import java.util.Map;
9-
import java.util.stream.Collectors;
108

119
public class ScriptVariable extends ScriptValue {
1210
private ScriptValue value;
@@ -24,6 +22,11 @@ public ScriptValue get() {
2422
return value;
2523
}
2624

25+
@Override
26+
public String toString() {
27+
return asText();
28+
}
29+
2730
public void set(ScriptValue value) {
2831
this.value = value;
2932
}
@@ -62,4 +65,26 @@ String typeName() {
6265
public boolean valueEquals(ScriptValue other) {
6366
return get().valueEquals(other);
6467
}
68+
69+
@Override
70+
public ScriptValue getCompareValue() {
71+
return get().getCompareValue();
72+
}
73+
74+
@Override
75+
public int compare(ScriptValue other) {
76+
return get().compare(other);
77+
}
78+
79+
@Override
80+
public String formatAsText() {
81+
return get().formatAsText();
82+
}
83+
84+
public static class Serializer implements JsonSerializer<ScriptVariable> {
85+
@Override
86+
public JsonElement serialize(ScriptVariable scriptValue, Type type, JsonSerializationContext context) {
87+
return context.serialize(scriptValue.get());
88+
}
89+
}
6590
}

0 commit comments

Comments
 (0)