java-commons/muscript/src/main/java/io/gitlab/jfronny/muscript/ast/dynamic/Variable.java

43 lines
1.4 KiB
Java
Raw Normal View History

2023-01-20 18:52:57 +01:00
package io.gitlab.jfronny.muscript.ast.dynamic;
2023-01-20 18:52:57 +01:00
import io.gitlab.jfronny.muscript.data.dynamic.Dynamic;
import io.gitlab.jfronny.muscript.ast.DynamicExpr;
import io.gitlab.jfronny.muscript.annotations.CanThrow;
import io.gitlab.jfronny.muscript.annotations.UncheckedDynamic;
import io.gitlab.jfronny.muscript.error.LocationalException;
@CanThrow
@UncheckedDynamic
public class Variable extends DynamicExpr {
private final String name;
2023-01-20 17:47:41 +01:00
public Variable(int chStart, int chEnd, String name) {
super(chStart, chEnd);
this.name = name;
}
@Override
2022-06-13 13:31:54 +02:00
public Dynamic<?> get(Dynamic<?> dataRoot) {
if (dataRoot.asObject().has(name)) return dataRoot.asObject().get(name);
else if (name.contains("::")) {
2022-06-13 13:31:54 +02:00
Dynamic<?> res = dataRoot;
for (String s : name.split("::")) {
if (!res.asObject().has(s))
2023-01-20 17:47:41 +01:00
throw new LocationalException(chStart, chEnd, "This object doesn't contain '" + name + "'");
res = res.asObject().get(s);
}
return res;
2023-01-20 17:47:41 +01:00
} else throw new LocationalException(chStart, chEnd, "This object doesn't contain '" + name + "'");
}
@Override
public DynamicExpr optimize() {
return this;
}
@Override
public boolean equals(Object obj) {
return obj instanceof Variable variable && name.equals(variable.name);
}
}