From f04d5ce40787cccdb6b5e3d81d1ccbe1d543a4a8 Mon Sep 17 00:00:00 2001 From: JFronny Date: Sun, 7 Apr 2024 17:16:26 +0200 Subject: [PATCH] fix(muscript): restore old convenience methods for decompiling --- .../muscript/ast/context/IExprSerializer.java | 13 +++++++- .../muscript/serialize/Decompiler.java | 33 ++++++++++--------- .../serialize/impl/ExprSerializerImpl.java | 9 +++-- 3 files changed, 37 insertions(+), 18 deletions(-) diff --git a/muscript-ast/src/main/java/io/gitlab/jfronny/muscript/ast/context/IExprSerializer.java b/muscript-ast/src/main/java/io/gitlab/jfronny/muscript/ast/context/IExprSerializer.java index ef90662..61b91c7 100644 --- a/muscript-ast/src/main/java/io/gitlab/jfronny/muscript/ast/context/IExprSerializer.java +++ b/muscript-ast/src/main/java/io/gitlab/jfronny/muscript/ast/context/IExprSerializer.java @@ -8,7 +8,18 @@ import java.util.ServiceLoader; public interface IExprSerializer { IExprSerializer INSTANCE = ServiceLoader.load(IExprSerializer.class) .findFirst() - .orElseGet(() -> expr -> null); + .orElseGet(() -> new IExprSerializer() { + @Override + public @Nullable String serialize(Expr expr) { + return null; + } + + @Override + public @Nullable String serialize(Script script) { + return null; + } + }); @Nullable String serialize(Expr expr); + @Nullable String serialize(Script script); } diff --git a/muscript-serialize/src/main/java/io/gitlab/jfronny/muscript/serialize/Decompiler.java b/muscript-serialize/src/main/java/io/gitlab/jfronny/muscript/serialize/Decompiler.java index 7ce5afc..01a8f41 100644 --- a/muscript-serialize/src/main/java/io/gitlab/jfronny/muscript/serialize/Decompiler.java +++ b/muscript-serialize/src/main/java/io/gitlab/jfronny/muscript/serialize/Decompiler.java @@ -5,7 +5,7 @@ import io.gitlab.jfronny.muscript.ast.*; import io.gitlab.jfronny.muscript.ast.bool.*; import io.gitlab.jfronny.muscript.ast.context.Script; import io.gitlab.jfronny.muscript.ast.dynamic.*; -import io.gitlab.jfronny.muscript.ast.extensible.ExtensibleExpr; +import io.gitlab.jfronny.muscript.ast.extensible.*; import io.gitlab.jfronny.muscript.ast.number.*; import io.gitlab.jfronny.muscript.ast.string.*; import io.gitlab.jfronny.muscript.core.ExprWriter; @@ -21,6 +21,14 @@ import java.util.stream.Stream; import static io.gitlab.jfronny.muscript.ast.context.ExprUtils.asString; public abstract class Decompiler { + public static String decompile(Expr expr) { + return ExprWriter.write(writer -> decompile(writer, expr), false); + } + + public static String decompile(Script script) { + return ExprWriter.write(writer -> decompile(writer, script), false); + } + public static void decompile(ExprWriter writer, Script script) throws IOException { for (Expr expr : script.stream().toList()) { decompile(writer, expr); @@ -30,6 +38,7 @@ public abstract class Decompiler { public static void decompile(ExprWriter writer, Expr expr) throws IOException { switch (expr) { + case null -> throw new NullPointerException(); case DynamicCoerce(var inner) -> decompile(writer, inner); case StringCoerce(var inner) -> decompile(writer, inner); case BoolUnpack(var inner) -> decompile(writer, inner); @@ -62,7 +71,7 @@ public abstract class Decompiler { } case And(var location, var left, var right) -> { parenthesize(expr, left, writer, false); - writer.append(" && "); + writer.append(" & "); parenthesize(expr, right, writer, true); } case Not(var location, var inner) -> { @@ -181,21 +190,15 @@ public abstract class Decompiler { if (i == boundArgs.size() - 1 && variadic) writer.append("..."); } writer.append(" ->"); - if (steps.isEmpty()) { - writer.append(" "); - decompile(writer, finish); - writer.append(" }"); - } else { - writer.increaseIndent(); - for (Expr step : steps) { - writer.append("\n"); - decompile(writer, step); - writer.append(";"); - } + writer.increaseIndent(); + for (Expr step : steps) { writer.append("\n"); - decompile(writer, finish); - writer.append(";").decreaseIndent().append("\n}"); + decompile(writer, step); + writer.append(";"); } + writer.append("\n"); + decompile(writer, finish); + writer.append(";").decreaseIndent().append("\n}"); } case ExprGroup(var location, var steps, var finish, var packedArgs, var fork) -> decompile(writer, fork ? new Call( diff --git a/muscript-serialize/src/main/java/io/gitlab/jfronny/muscript/serialize/impl/ExprSerializerImpl.java b/muscript-serialize/src/main/java/io/gitlab/jfronny/muscript/serialize/impl/ExprSerializerImpl.java index 703452b..a36f406 100644 --- a/muscript-serialize/src/main/java/io/gitlab/jfronny/muscript/serialize/impl/ExprSerializerImpl.java +++ b/muscript-serialize/src/main/java/io/gitlab/jfronny/muscript/serialize/impl/ExprSerializerImpl.java @@ -2,12 +2,17 @@ package io.gitlab.jfronny.muscript.serialize.impl; import io.gitlab.jfronny.muscript.ast.Expr; import io.gitlab.jfronny.muscript.ast.context.IExprSerializer; -import io.gitlab.jfronny.muscript.core.ExprWriter; +import io.gitlab.jfronny.muscript.ast.context.Script; import io.gitlab.jfronny.muscript.serialize.Decompiler; public class ExprSerializerImpl implements IExprSerializer { @Override public String serialize(Expr expr) { - return ExprWriter.write(writer -> Decompiler.decompile(writer, expr), false); + return Decompiler.decompile(expr); + } + + @Override + public String serialize(Script script) { + return Decompiler.decompile(script); } }