feat(muscript): prepare for extractSideEffects

This commit is contained in:
Johannes Frohnmeyer 2024-04-05 18:13:16 +02:00
parent b15058a8e8
commit 9e6e337843
Signed by: Johannes
GPG Key ID: E76429612C2929F4
5 changed files with 35 additions and 0 deletions

View File

@ -1,10 +1,18 @@
package io.gitlab.jfronny.muscript.ast.extensible; package io.gitlab.jfronny.muscript.ast.extensible;
import io.gitlab.jfronny.muscript.ast.BoolExpr; import io.gitlab.jfronny.muscript.ast.BoolExpr;
import io.gitlab.jfronny.muscript.ast.Expr;
import java.util.stream.Stream;
public non-sealed interface ExtensibleBoolExpr extends BoolExpr, ExtensibleExpr { public non-sealed interface ExtensibleBoolExpr extends BoolExpr, ExtensibleExpr {
@Override @Override
default BoolExpr optimize() { default BoolExpr optimize() {
return this; return this;
} }
@Override
default Stream<Expr> extractSideEffects() {
return Stream.of(this);
}
} }

View File

@ -1,10 +1,18 @@
package io.gitlab.jfronny.muscript.ast.extensible; package io.gitlab.jfronny.muscript.ast.extensible;
import io.gitlab.jfronny.muscript.ast.DynamicExpr; import io.gitlab.jfronny.muscript.ast.DynamicExpr;
import io.gitlab.jfronny.muscript.ast.Expr;
import java.util.stream.Stream;
public non-sealed interface ExtensibleDynamicExpr extends DynamicExpr, ExtensibleExpr { public non-sealed interface ExtensibleDynamicExpr extends DynamicExpr, ExtensibleExpr {
@Override @Override
default DynamicExpr optimize() { default DynamicExpr optimize() {
return this; return this;
} }
@Override
default Stream<Expr> extractSideEffects() {
return Stream.of(this);
}
} }

View File

@ -3,7 +3,10 @@ package io.gitlab.jfronny.muscript.ast.extensible;
import io.gitlab.jfronny.muscript.ast.Expr; import io.gitlab.jfronny.muscript.ast.Expr;
import io.gitlab.jfronny.muscript.core.ExprWriter; import io.gitlab.jfronny.muscript.core.ExprWriter;
import java.util.stream.Stream;
public sealed interface ExtensibleExpr permits ExtensibleBoolExpr, ExtensibleDynamicExpr, ExtensibleNumberExpr, ExtensibleStringExpr { public sealed interface ExtensibleExpr permits ExtensibleBoolExpr, ExtensibleDynamicExpr, ExtensibleNumberExpr, ExtensibleStringExpr {
void decompile(ExprWriter writer); void decompile(ExprWriter writer);
Expr optimize(); Expr optimize();
Stream<Expr> extractSideEffects();
} }

View File

@ -1,10 +1,18 @@
package io.gitlab.jfronny.muscript.ast.extensible; package io.gitlab.jfronny.muscript.ast.extensible;
import io.gitlab.jfronny.muscript.ast.Expr;
import io.gitlab.jfronny.muscript.ast.NumberExpr; import io.gitlab.jfronny.muscript.ast.NumberExpr;
import java.util.stream.Stream;
public non-sealed interface ExtensibleNumberExpr extends NumberExpr, ExtensibleExpr { public non-sealed interface ExtensibleNumberExpr extends NumberExpr, ExtensibleExpr {
@Override @Override
default NumberExpr optimize() { default NumberExpr optimize() {
return this; return this;
} }
@Override
default Stream<Expr> extractSideEffects() {
return Stream.of(this);
}
} }

View File

@ -1,10 +1,18 @@
package io.gitlab.jfronny.muscript.ast.extensible; package io.gitlab.jfronny.muscript.ast.extensible;
import io.gitlab.jfronny.muscript.ast.Expr;
import io.gitlab.jfronny.muscript.ast.StringExpr; import io.gitlab.jfronny.muscript.ast.StringExpr;
import java.util.stream.Stream;
public non-sealed interface ExtensibleStringExpr extends StringExpr, ExtensibleExpr { public non-sealed interface ExtensibleStringExpr extends StringExpr, ExtensibleExpr {
@Override @Override
default StringExpr optimize() { default StringExpr optimize() {
return this; return this;
} }
@Override
default Stream<Expr> extractSideEffects() {
return Stream.of(this);
}
} }