Skip to content

Commit 0ce9079

Browse files
committed
Improve local variable tracking
1 parent a2197ea commit 0ce9079

5 files changed

Lines changed: 29 additions & 30 deletions

File tree

src/main/java/org/skriptlang/reflect/syntax/custom/condition/CustomCondition.java

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -54,12 +54,8 @@ public boolean check(Event event) {
5454
core.matchedPattern(),
5555
core.parseResult()
5656
);
57+
core.walk(trigger, checkEvent);
5758

58-
if (core.parseEvent() == null) {
59-
Trigger.walk(trigger, checkEvent);
60-
} else {
61-
Variables.withLocalVariables(core.parseEvent(), checkEvent, () -> Trigger.walk(trigger, checkEvent));
62-
}
6359
return checkEvent.isMarkedContinue() ^ checkEvent.isNegated() ^ isNegated();
6460
}
6561

src/main/java/org/skriptlang/reflect/syntax/custom/effect/CustomEffect.java

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import ch.njol.skript.lang.Effect;
55
import ch.njol.skript.lang.Expression;
66
import ch.njol.skript.lang.SkriptParser.ParseResult;
7+
import ch.njol.skript.lang.Trigger;
78
import ch.njol.skript.lang.TriggerItem;
89
import ch.njol.skript.variables.Variables;
910
import ch.njol.util.Kleenean;
@@ -61,7 +62,8 @@ protected void execute(Event event) {
6162
}
6263

6364
private EffectTriggerEvent invokeEffect(Event event) {
64-
assert info.executeTrigger() != null;
65+
Trigger trigger = info.executeTrigger();
66+
assert trigger != null;
6567

6668
EffectTriggerEvent triggerEvent = new EffectTriggerEvent(
6769
event,
@@ -71,13 +73,8 @@ private EffectTriggerEvent invokeEffect(Event event) {
7173
core.parseResult(),
7274
getNext()
7375
);
76+
core.walk(trigger, triggerEvent);
7477

75-
if (core.parseEvent() == null) {
76-
TriggerItem.walk(info.executeTrigger(), triggerEvent);
77-
return triggerEvent;
78-
}
79-
Variables.withLocalVariables(core.parseEvent(), triggerEvent,
80-
() -> TriggerItem.walk(info.executeTrigger(), triggerEvent));
8178
return triggerEvent;
8279
}
8380

src/main/java/org/skriptlang/reflect/syntax/custom/event/CustomEvent.java

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import ch.njol.skript.lang.SkriptEvent;
66
import ch.njol.skript.lang.SkriptParser.ParseResult;
77
import ch.njol.skript.lang.Trigger;
8+
import ch.njol.skript.lang.TriggerItem;
89
import ch.njol.skript.variables.Variables;
910
import org.bukkit.event.Event;
1011
import org.jetbrains.annotations.Nullable;
@@ -66,12 +67,8 @@ public boolean check(Event event) {
6667
core.matchedPattern(),
6768
core.parseResult()
6869
);
70+
core.walk(checkTrigger, checkEvent);
6971

70-
if (core.parseEvent() == null) {
71-
Trigger.walk(checkTrigger, checkEvent);
72-
} else {
73-
Variables.withLocalVariables(core.parseEvent(), checkEvent, () -> Trigger.walk(checkTrigger, checkEvent));
74-
}
7572
return checkEvent.isMarkedContinue();
7673
}
7774

src/main/java/org/skriptlang/reflect/syntax/custom/expression/CustomExpression.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
import ch.njol.skript.lang.Expression;
66
import ch.njol.skript.lang.SkriptParser.ParseResult;
77
import ch.njol.skript.lang.Trigger;
8-
import ch.njol.skript.lang.TriggerItem;
98
import ch.njol.skript.lang.util.SimpleExpression;
109
import ch.njol.util.Kleenean;
1110
import org.bukkit.event.Event;
@@ -51,7 +50,7 @@ protected T[] get(Event event) {
5150
core.parseResult()
5251
);
5352

54-
TriggerItem.walk(info.getterTrigger(), getEvent);
53+
core.walk(info.getterTrigger(), getEvent);
5554
//noinspection unchecked
5655
return (T[]) getEvent.output();
5756
}
@@ -72,7 +71,7 @@ public void change(Event event, Object @Nullable [] delta, ChangeMode mode) {
7271
core.parseResult(),
7372
delta
7473
);
75-
Trigger.walk(trigger, changeEvent);
74+
core.walk(trigger, changeEvent);
7675
}
7776

7877
@Override

src/main/java/org/skriptlang/reflect/syntax/custom/shared/CustomSyntaxCore.java

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,19 +4,15 @@
44
import ch.njol.skript.lang.Expression;
55
import ch.njol.skript.lang.SkriptParser.ParseResult;
66
import ch.njol.skript.lang.SyntaxElement;
7-
import ch.njol.skript.lang.Trigger;
87
import ch.njol.skript.lang.TriggerItem;
98
import ch.njol.skript.lang.parser.ParserInstance;
109
import ch.njol.skript.util.LiteralUtils;
11-
import com.btk5h.skriptmirror.util.SkriptMirrorUtil;
10+
import ch.njol.skript.variables.Variables;
1211
import org.bukkit.event.Event;
1312
import org.jetbrains.annotations.Nullable;
14-
import org.skriptlang.skript.lang.script.Script;
15-
import org.skriptlang.skript.util.Priority;
1613

1714
import java.util.Arrays;
1815
import java.util.Objects;
19-
import java.util.function.Predicate;
2016

2117
public class CustomSyntaxCore {
2218

@@ -26,7 +22,7 @@ public class CustomSyntaxCore {
2622
private int matchedPattern;
2723
private ParseResult parseResult;
2824
private String usedPattern;
29-
private @Nullable SyntaxParseEvent parseEvent;
25+
private @Nullable Object localVariables;
3026

3127
public CustomSyntaxCore(CustomSyntaxInfo<?> info) {
3228
this.info = info;
@@ -58,9 +54,12 @@ public boolean init(SyntaxElement self, Expression<?>[] expressions, int matched
5854
}
5955

6056
Class<? extends Event>[] events = ParserInstance.get().getCurrentEvents();
61-
parseEvent = new SyntaxParseEvent(self, expressions, matchedPattern, parseResult, events);
57+
SyntaxParseEvent parseEvent = new SyntaxParseEvent(self, expressions, matchedPattern, parseResult, events);
6258
TriggerItem.walk(info.parseTrigger(), parseEvent);
63-
return parseEvent.isMarkedContinue();
59+
if (!parseEvent.isMarkedContinue())
60+
return false;
61+
localVariables = Variables.copyLocalVariables(parseEvent);
62+
return true;
6463
}
6564

6665
public Expression<?>[] expressions() {
@@ -79,8 +78,19 @@ public String usedPattern() {
7978
return usedPattern;
8079
}
8180

82-
public @Nullable SyntaxParseEvent parseEvent() {
83-
return parseEvent;
81+
public @Nullable Object localVariables() {
82+
return localVariables;
83+
}
84+
85+
public void walk(TriggerItem trigger, Event event) {
86+
if (localVariables == null) {
87+
TriggerItem.walk(trigger, event);
88+
return;
89+
}
90+
91+
Variables.setLocalVariables(event, localVariables);
92+
TriggerItem.walk(trigger, event);
93+
Variables.removeLocals(event);
8494
}
8595

8696
}

0 commit comments

Comments
 (0)