From cacffd01e86442c6312a139c00559af288bda770 Mon Sep 17 00:00:00 2001 From: TopchetoEU <36534413+TopchetoEU@users.noreply.github.com> Date: Sun, 12 Jan 2025 04:27:43 +0200 Subject: [PATCH] move JSON and parsing logic to compiler project, decouple JSON and parser from engine logic --- .../j2s/common/{parsing => }/Filename.java | 2 +- .../me/topchetoeu/j2s/common/Instruction.java | 2 - .../j2s/common/{parsing => }/Location.java | 4 +- .../topchetoeu/j2s/common/StringifyUtils.java | 123 ++++++++++++++++++ .../j2s/common/SyntaxException.java | 2 - .../j2s/common/mapping/FunctionMap.java | 4 +- .../j2s/common/TestEnvironment.java | 72 ---------- .../topchetoeu/j2s/common/TestFilename.java | 2 - .../topchetoeu/j2s/common/TestLocation.java | 3 - .../j2s/compilation/CompileResult.java | 2 +- .../j2s/compilation/CompoundNode.java | 8 +- .../j2s/compilation/FunctionNode.java | 8 +- .../compilation/FunctionStatementNode.java | 2 +- .../j2s/compilation/FunctionValueNode.java | 2 +- .../j2s/compilation/JavaScript.java | 8 +- .../j2s/compilation/LabelContext.java | 2 +- .../me/topchetoeu/j2s/compilation/Node.java | 2 +- .../topchetoeu/j2s/compilation/Parameter.java | 2 +- .../j2s/compilation/VariableDeclareNode.java | 8 +- .../j2s/compilation/control/BreakNode.java | 8 +- .../j2s/compilation/control/ContinueNode.java | 8 +- .../j2s/compilation/control/DebugNode.java | 8 +- .../j2s/compilation/control/DeleteNode.java | 8 +- .../j2s/compilation/control/DoWhileNode.java | 8 +- .../j2s/compilation/control/ForInNode.java | 8 +- .../j2s/compilation/control/ForNode.java | 8 +- .../j2s/compilation/control/IfNode.java | 8 +- .../j2s/compilation/control/ReturnNode.java | 8 +- .../j2s/compilation/control/SwitchNode.java | 8 +- .../j2s/compilation/control/ThrowNode.java | 8 +- .../j2s/compilation/control/TryNode.java | 8 +- .../j2s/compilation/control/WhileNode.java | 8 +- .../j2s/compilation}/json/JSON.java | 47 ++----- .../j2s/compilation}/json/JSONElement.java | 2 +- .../j2s/compilation}/json/JSONList.java | 2 +- .../j2s/compilation}/json/JSONMap.java | 2 +- .../compilation/members/FieldMemberNode.java | 8 +- .../j2s/compilation/members/Member.java | 2 +- .../members/PropertyMemberNode.java | 8 +- .../j2s/compilation}/parsing/ParseRes.java | 4 +- .../j2s/compilation}/parsing/Parser.java | 2 +- .../j2s/compilation}/parsing/Parsing.java | 17 +-- .../j2s/compilation}/parsing/Source.java | 4 +- .../compilation}/parsing/SourceLocation.java | 5 +- .../compilation/patterns/AssignTarget.java | 2 +- .../j2s/compilation/values/ArgumentsNode.java | 2 +- .../j2s/compilation/values/ArrayNode.java | 8 +- .../compilation/values/GlobalThisNode.java | 2 +- .../j2s/compilation/values/ObjectNode.java | 8 +- .../j2s/compilation/values/RegexNode.java | 8 +- .../j2s/compilation/values/ThisNode.java | 2 +- .../j2s/compilation/values/VariableNode.java | 8 +- .../values/constants/BoolNode.java | 2 +- .../values/constants/NullNode.java | 2 +- .../values/constants/NumberNode.java | 8 +- .../values/constants/StringNode.java | 8 +- .../values/operations/AssignNode.java | 2 +- .../values/operations/CallNode.java | 8 +- .../values/operations/ChangeNode.java | 8 +- .../values/operations/DiscardNode.java | 8 +- .../values/operations/IndexNode.java | 8 +- .../values/operations/LazyAndNode.java | 8 +- .../values/operations/LazyOrNode.java | 8 +- .../values/operations/OperationNode.java | 8 +- .../values/operations/PostfixNode.java | 8 +- .../values/operations/TypeofNode.java | 8 +- .../values/operations/VariableAssignNode.java | 2 +- .../j2s/compilation}/TestParseRes.java | 6 +- .../j2s/compilation}/TestSource.java | 8 +- .../compilation/parsing/TestParseString.java | 68 ++++++++++ .../compilation/parsing/TestSkipWhite.java | 51 ++++++++ .../topchetoeu/j2s/repl}/JSONConverter.java | 8 +- .../me/topchetoeu/j2s/repl/SimpleRepl.java | 27 +++- .../java/me/topchetoeu/j2s/repl/V8Error.java | 4 +- .../j2s/repl/debug/DebugServer.java | 6 +- .../j2s/repl/debug/SimpleDebugger.java | 14 +- .../me/topchetoeu/j2s/repl/debug/V8Error.java | 4 +- .../me/topchetoeu/j2s/repl/debug/V8Event.java | 4 +- .../topchetoeu/j2s/repl/debug/V8Message.java | 6 +- .../topchetoeu/j2s/repl/debug/V8Result.java | 4 +- .../j2s/repl/mapping/NativeMapper.java | 4 +- .../me/topchetoeu/j2s/runtime/Compiler.java | 4 +- .../me/topchetoeu/j2s/runtime/EventLoop.java | 2 +- .../j2s/runtime/debug/DebugContext.java | 2 +- .../j2s/runtime/debug/DebugHandler.java | 2 +- .../runtime/exceptions/EngineException.java | 2 +- .../values/primitives/StringValue.java | 12 +- .../primitives/numbers/DoubleValue.java | 5 +- .../primitives/numbers/NumberValue.java | 21 --- 89 files changed, 495 insertions(+), 370 deletions(-) rename common/src/main/java/me/topchetoeu/j2s/common/{parsing => }/Filename.java (96%) rename common/src/main/java/me/topchetoeu/j2s/common/{parsing => }/Location.java (94%) create mode 100644 common/src/main/java/me/topchetoeu/j2s/common/StringifyUtils.java delete mode 100644 common/src/test/java/me/topchetoeu/j2s/common/TestEnvironment.java rename {common/src/main/java/me/topchetoeu/j2s/common => compilation/src/main/java/me/topchetoeu/j2s/compilation}/json/JSON.java (78%) rename {common/src/main/java/me/topchetoeu/j2s/common => compilation/src/main/java/me/topchetoeu/j2s/compilation}/json/JSONElement.java (98%) rename {common/src/main/java/me/topchetoeu/j2s/common => compilation/src/main/java/me/topchetoeu/j2s/compilation}/json/JSONList.java (95%) rename {common/src/main/java/me/topchetoeu/j2s/common => compilation/src/main/java/me/topchetoeu/j2s/compilation}/json/JSONMap.java (99%) rename {common/src/main/java/me/topchetoeu/j2s/common => compilation/src/main/java/me/topchetoeu/j2s/compilation}/parsing/ParseRes.java (96%) rename {common/src/main/java/me/topchetoeu/j2s/common => compilation/src/main/java/me/topchetoeu/j2s/compilation}/parsing/Parser.java (62%) rename {common/src/main/java/me/topchetoeu/j2s/common => compilation/src/main/java/me/topchetoeu/j2s/compilation}/parsing/Parsing.java (96%) rename {common/src/main/java/me/topchetoeu/j2s/common => compilation/src/main/java/me/topchetoeu/j2s/compilation}/parsing/Source.java (93%) rename {common/src/main/java/me/topchetoeu/j2s/common => compilation/src/main/java/me/topchetoeu/j2s/compilation}/parsing/SourceLocation.java (91%) rename {common/src/test/java/me/topchetoeu/j2s/common => compilation/src/test/java/me/topchetoeu/j2s/compilation}/TestParseRes.java (94%) rename {common/src/test/java/me/topchetoeu/j2s/common => compilation/src/test/java/me/topchetoeu/j2s/compilation}/TestSource.java (92%) create mode 100644 compilation/src/test/java/me/topchetoeu/j2s/compilation/parsing/TestParseString.java create mode 100644 compilation/src/test/java/me/topchetoeu/j2s/compilation/parsing/TestSkipWhite.java rename {runtime/src/main/java/me/topchetoeu/j2s/runtime => repl/src/main/java/me/topchetoeu/j2s/repl}/JSONConverter.java (93%) diff --git a/common/src/main/java/me/topchetoeu/j2s/common/parsing/Filename.java b/common/src/main/java/me/topchetoeu/j2s/common/Filename.java similarity index 96% rename from common/src/main/java/me/topchetoeu/j2s/common/parsing/Filename.java rename to common/src/main/java/me/topchetoeu/j2s/common/Filename.java index 0bdc7e0..bb3f0f3 100644 --- a/common/src/main/java/me/topchetoeu/j2s/common/parsing/Filename.java +++ b/common/src/main/java/me/topchetoeu/j2s/common/Filename.java @@ -1,4 +1,4 @@ -package me.topchetoeu.j2s.common.parsing; +package me.topchetoeu.j2s.common; import java.io.File; diff --git a/common/src/main/java/me/topchetoeu/j2s/common/Instruction.java b/common/src/main/java/me/topchetoeu/j2s/common/Instruction.java index 372bea9..cb4387c 100644 --- a/common/src/main/java/me/topchetoeu/j2s/common/Instruction.java +++ b/common/src/main/java/me/topchetoeu/j2s/common/Instruction.java @@ -4,8 +4,6 @@ import java.util.HashMap; import java.util.function.IntFunction; import java.util.function.IntSupplier; -import me.topchetoeu.j2s.common.parsing.Location; - public class Instruction { public static enum Type { RETURN(0x00), diff --git a/common/src/main/java/me/topchetoeu/j2s/common/parsing/Location.java b/common/src/main/java/me/topchetoeu/j2s/common/Location.java similarity index 94% rename from common/src/main/java/me/topchetoeu/j2s/common/parsing/Location.java rename to common/src/main/java/me/topchetoeu/j2s/common/Location.java index 28127d0..39d867d 100644 --- a/common/src/main/java/me/topchetoeu/j2s/common/parsing/Location.java +++ b/common/src/main/java/me/topchetoeu/j2s/common/Location.java @@ -1,10 +1,8 @@ -package me.topchetoeu.j2s.common.parsing; +package me.topchetoeu.j2s.common; import java.util.ArrayList; import java.util.Objects; -import me.topchetoeu.j2s.common.Metadata; - public abstract class Location implements Comparable { public static final Location INTERNAL = Location.of(new Filename(Metadata.name(), "native"), -1, -1); diff --git a/common/src/main/java/me/topchetoeu/j2s/common/StringifyUtils.java b/common/src/main/java/me/topchetoeu/j2s/common/StringifyUtils.java new file mode 100644 index 0000000..38919cf --- /dev/null +++ b/common/src/main/java/me/topchetoeu/j2s/common/StringifyUtils.java @@ -0,0 +1,123 @@ +package me.topchetoeu.j2s.common; + +import java.math.BigDecimal; + +public class StringifyUtils { + public static String quoteString(String raw) { + var res = new StringBuilder("\""); + var alphabet = "0123456789ABCDEF".toCharArray(); + + for (var c : raw.toCharArray()) { + if (c < 32 || c >= 127) { + res + .append("\\u") + .append(alphabet[(c >> 12) & 0xF]) + .append(alphabet[(c >> 8) & 0xF]) + .append(alphabet[(c >> 4) & 0xF]) + .append(alphabet[(c >> 0) & 0xF]); + } + else if (c == '\\') + res.append("\\\\"); + else if (c == '"') + res.append("\\\""); + else res.append(c); + } + + return res.append('"').toString(); + } + + public static String quoteNumber(Double num) { + if (num == Double.NEGATIVE_INFINITY) return "-Infinity"; + if (num == Double.POSITIVE_INFINITY) return "Infinity"; + if (Double.isNaN(num)) return "NaN"; + return BigDecimal.valueOf(num).stripTrailingZeros().toPlainString(); + } + + private static double power(double a, long b) { + if (b == 0) return 1; + if (b == 1) return a; + if (b < 0) return 1 / power(a, -b); + + if ((b & 1) == 0) return power(a * a, b / 2); + else return a * power(a * a, b / 2); + } + + public static Double unqoteNumber(String src) { + var i = 0; + + double whole = 0; + double fract = 0; + long exponent = 0; + boolean parsedAny = false; + boolean negative = false; + + if (src.charAt(i) == '-') { + negative = true; + i++; + } + + while (i < src.length()) { + var c = src.charAt(i); + if (c < '0' || c > '9') break; + + parsedAny = true; + whole *= 10; + whole += src.charAt(i++) - '0'; + } + + if (i < src.length() && src.charAt(i) == '.') { + parsedAny = true; + i++; + + while (i < src.length()) { + var c = src.charAt(i); + if (c < '0' || c > '9') break; + + parsedAny = true; + fract += src.charAt(i++) - '0'; + fract /= 10; + } + } + + if (i < src.length() && (src.charAt(i) == 'e' || src.charAt(i) == 'E')) { + i++; + parsedAny = true; + boolean expNegative = false; + boolean parsedE = false; + + if (i < src.length()) { + if (src.charAt(i) == '-') { + expNegative = true; + i++; + } + else if (src.charAt(i) == '+') { + i++; + } + } + + + while (i < src.length()) { + var c = src.charAt(i); + if (c < '0' || c > '9') break; + + parsedE = true; + exponent *= 10; + + if (expNegative) exponent -= src.charAt(i) - '0'; + else exponent += src.charAt(i) - '0'; + } + + if (!parsedE) return Double.NaN; + } + + if (i != src.length()) return Double.NaN; + + if (!parsedAny) { + if (negative) return Double.NaN; + return 0.; + } + else if (negative) return -(whole + fract) * power(10, exponent); + else return (whole + fract) * power(10, exponent); + } +} + diff --git a/common/src/main/java/me/topchetoeu/j2s/common/SyntaxException.java b/common/src/main/java/me/topchetoeu/j2s/common/SyntaxException.java index 4e21345..4d12e27 100644 --- a/common/src/main/java/me/topchetoeu/j2s/common/SyntaxException.java +++ b/common/src/main/java/me/topchetoeu/j2s/common/SyntaxException.java @@ -1,7 +1,5 @@ package me.topchetoeu.j2s.common; -import me.topchetoeu.j2s.common.parsing.Location; - public class SyntaxException extends RuntimeException { public final Location loc; public final String msg; diff --git a/common/src/main/java/me/topchetoeu/j2s/common/mapping/FunctionMap.java b/common/src/main/java/me/topchetoeu/j2s/common/mapping/FunctionMap.java index aaca8fe..26bfec9 100644 --- a/common/src/main/java/me/topchetoeu/j2s/common/mapping/FunctionMap.java +++ b/common/src/main/java/me/topchetoeu/j2s/common/mapping/FunctionMap.java @@ -13,9 +13,9 @@ import java.util.function.Function; import java.util.regex.Pattern; import java.util.stream.Collectors; +import me.topchetoeu.j2s.common.Filename; +import me.topchetoeu.j2s.common.Location; import me.topchetoeu.j2s.common.Instruction.BreakpointType; -import me.topchetoeu.j2s.common.parsing.Filename; -import me.topchetoeu.j2s.common.parsing.Location; public class FunctionMap { public static class FunctionMapBuilder { diff --git a/common/src/test/java/me/topchetoeu/j2s/common/TestEnvironment.java b/common/src/test/java/me/topchetoeu/j2s/common/TestEnvironment.java deleted file mode 100644 index 6ecf487..0000000 --- a/common/src/test/java/me/topchetoeu/j2s/common/TestEnvironment.java +++ /dev/null @@ -1,72 +0,0 @@ -package me.topchetoeu.j2s.common; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertInstanceOf; - -import org.junit.jupiter.api.Test; - -import me.topchetoeu.j2s.common.environment.Environment; -import me.topchetoeu.j2s.common.environment.Key; - -public class TestEnvironment { - private final Key FOO = new Key<>(); - private final Key MARKER = new Key<>(); - - @Test public void testShouldCreate() { - new Environment(); - Environment.empty(); - } - @Test public void testShouldNotExist() { - var env = new Environment(); - assertEquals(null, env.get(FOO)); - assertEquals(false, env.has(FOO)); - } - - @Test public void testShouldAdd() { - var env = new Environment(); - env.add(FOO, "test"); - assertEquals("test", env.get(FOO)); - } - - @Test public void testShouldGetFromParent() { - var parent = new Environment(); - parent.add(FOO, "test"); - var child = parent.child(); - assertEquals("test", child.get(FOO)); - assertEquals(true, child.has(FOO)); - } - @Test public void testShouldHideParent() { - var parent = new Environment(); - parent.add(FOO, "test"); - var child = parent.child(); - child.remove(FOO); - assertEquals(null, child.get(FOO)); - assertEquals(false, child.has(FOO)); - } - - @Test public void testShouldAddMarker() { - var env = new Environment(); - env.add(MARKER); - assertEquals(true, env.has(MARKER)); - assertEquals(false, env.hasNotNull(MARKER)); - } - - @Test public void testShouldInitOnce() { - var env = new Environment(); - assertEquals("a", env.init(FOO, "a")); - assertEquals("a", env.init(FOO, "b")); - assertEquals("a", env.get(FOO)); - } - @Test public void testShouldInitOnceFrom() { - var env = new Environment(); - assertEquals("a", env.initFrom(FOO, () -> "a")); - assertEquals("a", env.initFrom(FOO, () -> "b")); - assertEquals("a", env.get(FOO)); - } - - @Test public void testShouldWrap() { - var env = new Environment(); - assertEquals(env, Environment.wrap(env)); - assertInstanceOf(Environment.class, Environment.wrap(null)); - } -} diff --git a/common/src/test/java/me/topchetoeu/j2s/common/TestFilename.java b/common/src/test/java/me/topchetoeu/j2s/common/TestFilename.java index 0da76e0..dbad89e 100644 --- a/common/src/test/java/me/topchetoeu/j2s/common/TestFilename.java +++ b/common/src/test/java/me/topchetoeu/j2s/common/TestFilename.java @@ -2,8 +2,6 @@ package me.topchetoeu.j2s.common; import org.junit.jupiter.api.Test; -import me.topchetoeu.j2s.common.parsing.Filename; - import static org.junit.jupiter.api.Assertions.assertEquals; public class TestFilename { diff --git a/common/src/test/java/me/topchetoeu/j2s/common/TestLocation.java b/common/src/test/java/me/topchetoeu/j2s/common/TestLocation.java index 3de25cd..fad7982 100644 --- a/common/src/test/java/me/topchetoeu/j2s/common/TestLocation.java +++ b/common/src/test/java/me/topchetoeu/j2s/common/TestLocation.java @@ -2,9 +2,6 @@ package me.topchetoeu.j2s.common; import org.junit.jupiter.api.Test; -import me.topchetoeu.j2s.common.parsing.Filename; -import me.topchetoeu.j2s.common.parsing.Location; - import static org.junit.jupiter.api.Assertions.assertEquals; public class TestLocation { diff --git a/compilation/src/main/java/me/topchetoeu/j2s/compilation/CompileResult.java b/compilation/src/main/java/me/topchetoeu/j2s/compilation/CompileResult.java index 95dbcc7..f57466a 100644 --- a/compilation/src/main/java/me/topchetoeu/j2s/compilation/CompileResult.java +++ b/compilation/src/main/java/me/topchetoeu/j2s/compilation/CompileResult.java @@ -7,12 +7,12 @@ import java.util.function.Function; import me.topchetoeu.j2s.common.FunctionBody; import me.topchetoeu.j2s.common.Instruction; +import me.topchetoeu.j2s.common.Location; import me.topchetoeu.j2s.common.Instruction.BreakpointType; import me.topchetoeu.j2s.common.environment.Environment; import me.topchetoeu.j2s.common.environment.Key; import me.topchetoeu.j2s.common.mapping.FunctionMap; import me.topchetoeu.j2s.common.mapping.FunctionMap.FunctionMapBuilder; -import me.topchetoeu.j2s.common.parsing.Location; import me.topchetoeu.j2s.compilation.control.TryNode; import me.topchetoeu.j2s.compilation.scope.FunctionScope; import me.topchetoeu.j2s.compilation.scope.Variable; diff --git a/compilation/src/main/java/me/topchetoeu/j2s/compilation/CompoundNode.java b/compilation/src/main/java/me/topchetoeu/j2s/compilation/CompoundNode.java index 7daca70..2a7c14b 100644 --- a/compilation/src/main/java/me/topchetoeu/j2s/compilation/CompoundNode.java +++ b/compilation/src/main/java/me/topchetoeu/j2s/compilation/CompoundNode.java @@ -5,11 +5,11 @@ import java.util.Arrays; import java.util.List; import me.topchetoeu.j2s.common.Instruction; +import me.topchetoeu.j2s.common.Location; import me.topchetoeu.j2s.common.Instruction.BreakpointType; -import me.topchetoeu.j2s.common.parsing.Location; -import me.topchetoeu.j2s.common.parsing.ParseRes; -import me.topchetoeu.j2s.common.parsing.Parsing; -import me.topchetoeu.j2s.common.parsing.Source; +import me.topchetoeu.j2s.compilation.parsing.ParseRes; +import me.topchetoeu.j2s.compilation.parsing.Parsing; +import me.topchetoeu.j2s.compilation.parsing.Source; public class CompoundNode extends Node { diff --git a/compilation/src/main/java/me/topchetoeu/j2s/compilation/FunctionNode.java b/compilation/src/main/java/me/topchetoeu/j2s/compilation/FunctionNode.java index f41e88d..25d3e4e 100644 --- a/compilation/src/main/java/me/topchetoeu/j2s/compilation/FunctionNode.java +++ b/compilation/src/main/java/me/topchetoeu/j2s/compilation/FunctionNode.java @@ -3,12 +3,12 @@ package me.topchetoeu.j2s.compilation; import java.util.List; import me.topchetoeu.j2s.common.Instruction; +import me.topchetoeu.j2s.common.Location; import me.topchetoeu.j2s.common.Instruction.BreakpointType; import me.topchetoeu.j2s.common.environment.Environment; -import me.topchetoeu.j2s.common.parsing.Location; -import me.topchetoeu.j2s.common.parsing.ParseRes; -import me.topchetoeu.j2s.common.parsing.Parsing; -import me.topchetoeu.j2s.common.parsing.Source; +import me.topchetoeu.j2s.compilation.parsing.ParseRes; +import me.topchetoeu.j2s.compilation.parsing.Parsing; +import me.topchetoeu.j2s.compilation.parsing.Source; import me.topchetoeu.j2s.compilation.scope.FunctionScope; import me.topchetoeu.j2s.compilation.values.VariableNode; diff --git a/compilation/src/main/java/me/topchetoeu/j2s/compilation/FunctionStatementNode.java b/compilation/src/main/java/me/topchetoeu/j2s/compilation/FunctionStatementNode.java index 0ade941..64968c4 100644 --- a/compilation/src/main/java/me/topchetoeu/j2s/compilation/FunctionStatementNode.java +++ b/compilation/src/main/java/me/topchetoeu/j2s/compilation/FunctionStatementNode.java @@ -3,8 +3,8 @@ package me.topchetoeu.j2s.compilation; import java.util.List; import me.topchetoeu.j2s.common.Instruction; +import me.topchetoeu.j2s.common.Location; import me.topchetoeu.j2s.common.Instruction.BreakpointType; -import me.topchetoeu.j2s.common.parsing.Location; import me.topchetoeu.j2s.compilation.scope.Variable; import me.topchetoeu.j2s.compilation.values.VariableNode; diff --git a/compilation/src/main/java/me/topchetoeu/j2s/compilation/FunctionValueNode.java b/compilation/src/main/java/me/topchetoeu/j2s/compilation/FunctionValueNode.java index 27064d6..2e19e45 100644 --- a/compilation/src/main/java/me/topchetoeu/j2s/compilation/FunctionValueNode.java +++ b/compilation/src/main/java/me/topchetoeu/j2s/compilation/FunctionValueNode.java @@ -3,8 +3,8 @@ package me.topchetoeu.j2s.compilation; import java.util.List; import me.topchetoeu.j2s.common.Instruction; +import me.topchetoeu.j2s.common.Location; import me.topchetoeu.j2s.common.Instruction.BreakpointType; -import me.topchetoeu.j2s.common.parsing.Location; import me.topchetoeu.j2s.compilation.values.VariableNode; public class FunctionValueNode extends FunctionNode { diff --git a/compilation/src/main/java/me/topchetoeu/j2s/compilation/JavaScript.java b/compilation/src/main/java/me/topchetoeu/j2s/compilation/JavaScript.java index 1563482..7f88133 100644 --- a/compilation/src/main/java/me/topchetoeu/j2s/compilation/JavaScript.java +++ b/compilation/src/main/java/me/topchetoeu/j2s/compilation/JavaScript.java @@ -6,13 +6,10 @@ import java.util.HashSet; import java.util.List; import java.util.Set; +import me.topchetoeu.j2s.common.Filename; import me.topchetoeu.j2s.common.SyntaxException; import me.topchetoeu.j2s.common.environment.Environment; import me.topchetoeu.j2s.common.environment.Key; -import me.topchetoeu.j2s.common.parsing.Filename; -import me.topchetoeu.j2s.common.parsing.ParseRes; -import me.topchetoeu.j2s.common.parsing.Parsing; -import me.topchetoeu.j2s.common.parsing.Source; import me.topchetoeu.j2s.compilation.control.BreakNode; import me.topchetoeu.j2s.compilation.control.ContinueNode; import me.topchetoeu.j2s.compilation.control.DebugNode; @@ -26,6 +23,9 @@ import me.topchetoeu.j2s.compilation.control.SwitchNode; import me.topchetoeu.j2s.compilation.control.ThrowNode; import me.topchetoeu.j2s.compilation.control.TryNode; import me.topchetoeu.j2s.compilation.control.WhileNode; +import me.topchetoeu.j2s.compilation.parsing.ParseRes; +import me.topchetoeu.j2s.compilation.parsing.Parsing; +import me.topchetoeu.j2s.compilation.parsing.Source; import me.topchetoeu.j2s.compilation.scope.FunctionScope; import me.topchetoeu.j2s.compilation.values.ArgumentsNode; import me.topchetoeu.j2s.compilation.values.ArrayNode; diff --git a/compilation/src/main/java/me/topchetoeu/j2s/compilation/LabelContext.java b/compilation/src/main/java/me/topchetoeu/j2s/compilation/LabelContext.java index e9aca45..7ba8a7d 100644 --- a/compilation/src/main/java/me/topchetoeu/j2s/compilation/LabelContext.java +++ b/compilation/src/main/java/me/topchetoeu/j2s/compilation/LabelContext.java @@ -6,10 +6,10 @@ import java.util.LinkedList; import java.util.function.IntSupplier; import me.topchetoeu.j2s.common.Instruction; +import me.topchetoeu.j2s.common.Location; import me.topchetoeu.j2s.common.SyntaxException; import me.topchetoeu.j2s.common.environment.Environment; import me.topchetoeu.j2s.common.environment.Key; -import me.topchetoeu.j2s.common.parsing.Location; public class LabelContext { public static final Key BREAK_CTX = new Key<>(); diff --git a/compilation/src/main/java/me/topchetoeu/j2s/compilation/Node.java b/compilation/src/main/java/me/topchetoeu/j2s/compilation/Node.java index 8fb5e8a..44c248e 100644 --- a/compilation/src/main/java/me/topchetoeu/j2s/compilation/Node.java +++ b/compilation/src/main/java/me/topchetoeu/j2s/compilation/Node.java @@ -1,7 +1,7 @@ package me.topchetoeu.j2s.compilation; +import me.topchetoeu.j2s.common.Location; import me.topchetoeu.j2s.common.Instruction.BreakpointType; -import me.topchetoeu.j2s.common.parsing.Location; public abstract class Node { private Location loc; diff --git a/compilation/src/main/java/me/topchetoeu/j2s/compilation/Parameter.java b/compilation/src/main/java/me/topchetoeu/j2s/compilation/Parameter.java index 65cf3b2..bd157dd 100644 --- a/compilation/src/main/java/me/topchetoeu/j2s/compilation/Parameter.java +++ b/compilation/src/main/java/me/topchetoeu/j2s/compilation/Parameter.java @@ -1,6 +1,6 @@ package me.topchetoeu.j2s.compilation; -import me.topchetoeu.j2s.common.parsing.Location; +import me.topchetoeu.j2s.common.Location; public final class Parameter { public final Location loc; diff --git a/compilation/src/main/java/me/topchetoeu/j2s/compilation/VariableDeclareNode.java b/compilation/src/main/java/me/topchetoeu/j2s/compilation/VariableDeclareNode.java index 833a8f2..2d7a76c 100644 --- a/compilation/src/main/java/me/topchetoeu/j2s/compilation/VariableDeclareNode.java +++ b/compilation/src/main/java/me/topchetoeu/j2s/compilation/VariableDeclareNode.java @@ -6,10 +6,10 @@ import java.util.List; import com.github.bsideup.jabel.Desugar; import me.topchetoeu.j2s.common.Instruction; -import me.topchetoeu.j2s.common.parsing.Location; -import me.topchetoeu.j2s.common.parsing.ParseRes; -import me.topchetoeu.j2s.common.parsing.Parsing; -import me.topchetoeu.j2s.common.parsing.Source; +import me.topchetoeu.j2s.common.Location; +import me.topchetoeu.j2s.compilation.parsing.ParseRes; +import me.topchetoeu.j2s.compilation.parsing.Parsing; +import me.topchetoeu.j2s.compilation.parsing.Source; import me.topchetoeu.j2s.compilation.values.VariableNode; public class VariableDeclareNode extends Node { diff --git a/compilation/src/main/java/me/topchetoeu/j2s/compilation/control/BreakNode.java b/compilation/src/main/java/me/topchetoeu/j2s/compilation/control/BreakNode.java index 377ca8b..e7da94c 100644 --- a/compilation/src/main/java/me/topchetoeu/j2s/compilation/control/BreakNode.java +++ b/compilation/src/main/java/me/topchetoeu/j2s/compilation/control/BreakNode.java @@ -1,15 +1,15 @@ package me.topchetoeu.j2s.compilation.control; import me.topchetoeu.j2s.common.Instruction; +import me.topchetoeu.j2s.common.Location; import me.topchetoeu.j2s.common.SyntaxException; -import me.topchetoeu.j2s.common.parsing.Location; -import me.topchetoeu.j2s.common.parsing.ParseRes; -import me.topchetoeu.j2s.common.parsing.Parsing; -import me.topchetoeu.j2s.common.parsing.Source; import me.topchetoeu.j2s.compilation.CompileResult; import me.topchetoeu.j2s.compilation.JavaScript; import me.topchetoeu.j2s.compilation.LabelContext; import me.topchetoeu.j2s.compilation.Node; +import me.topchetoeu.j2s.compilation.parsing.ParseRes; +import me.topchetoeu.j2s.compilation.parsing.Parsing; +import me.topchetoeu.j2s.compilation.parsing.Source; public class BreakNode extends Node { public final String label; diff --git a/compilation/src/main/java/me/topchetoeu/j2s/compilation/control/ContinueNode.java b/compilation/src/main/java/me/topchetoeu/j2s/compilation/control/ContinueNode.java index f823c85..e78f105 100644 --- a/compilation/src/main/java/me/topchetoeu/j2s/compilation/control/ContinueNode.java +++ b/compilation/src/main/java/me/topchetoeu/j2s/compilation/control/ContinueNode.java @@ -1,15 +1,15 @@ package me.topchetoeu.j2s.compilation.control; import me.topchetoeu.j2s.common.Instruction; +import me.topchetoeu.j2s.common.Location; import me.topchetoeu.j2s.common.SyntaxException; -import me.topchetoeu.j2s.common.parsing.Location; -import me.topchetoeu.j2s.common.parsing.ParseRes; -import me.topchetoeu.j2s.common.parsing.Parsing; -import me.topchetoeu.j2s.common.parsing.Source; import me.topchetoeu.j2s.compilation.CompileResult; import me.topchetoeu.j2s.compilation.JavaScript; import me.topchetoeu.j2s.compilation.LabelContext; import me.topchetoeu.j2s.compilation.Node; +import me.topchetoeu.j2s.compilation.parsing.ParseRes; +import me.topchetoeu.j2s.compilation.parsing.Parsing; +import me.topchetoeu.j2s.compilation.parsing.Source; public class ContinueNode extends Node { public final String label; diff --git a/compilation/src/main/java/me/topchetoeu/j2s/compilation/control/DebugNode.java b/compilation/src/main/java/me/topchetoeu/j2s/compilation/control/DebugNode.java index 80e0aaa..5b61478 100644 --- a/compilation/src/main/java/me/topchetoeu/j2s/compilation/control/DebugNode.java +++ b/compilation/src/main/java/me/topchetoeu/j2s/compilation/control/DebugNode.java @@ -1,13 +1,13 @@ package me.topchetoeu.j2s.compilation.control; import me.topchetoeu.j2s.common.Instruction; -import me.topchetoeu.j2s.common.parsing.Location; -import me.topchetoeu.j2s.common.parsing.ParseRes; -import me.topchetoeu.j2s.common.parsing.Parsing; -import me.topchetoeu.j2s.common.parsing.Source; +import me.topchetoeu.j2s.common.Location; import me.topchetoeu.j2s.compilation.CompileResult; import me.topchetoeu.j2s.compilation.JavaScript; import me.topchetoeu.j2s.compilation.Node; +import me.topchetoeu.j2s.compilation.parsing.ParseRes; +import me.topchetoeu.j2s.compilation.parsing.Parsing; +import me.topchetoeu.j2s.compilation.parsing.Source; public class DebugNode extends Node { @Override public void compileFunctions(CompileResult target) { diff --git a/compilation/src/main/java/me/topchetoeu/j2s/compilation/control/DeleteNode.java b/compilation/src/main/java/me/topchetoeu/j2s/compilation/control/DeleteNode.java index 9872219..f769a28 100644 --- a/compilation/src/main/java/me/topchetoeu/j2s/compilation/control/DeleteNode.java +++ b/compilation/src/main/java/me/topchetoeu/j2s/compilation/control/DeleteNode.java @@ -1,13 +1,13 @@ package me.topchetoeu.j2s.compilation.control; import me.topchetoeu.j2s.common.Instruction; -import me.topchetoeu.j2s.common.parsing.Location; -import me.topchetoeu.j2s.common.parsing.ParseRes; -import me.topchetoeu.j2s.common.parsing.Parsing; -import me.topchetoeu.j2s.common.parsing.Source; +import me.topchetoeu.j2s.common.Location; import me.topchetoeu.j2s.compilation.CompileResult; import me.topchetoeu.j2s.compilation.JavaScript; import me.topchetoeu.j2s.compilation.Node; +import me.topchetoeu.j2s.compilation.parsing.ParseRes; +import me.topchetoeu.j2s.compilation.parsing.Parsing; +import me.topchetoeu.j2s.compilation.parsing.Source; import me.topchetoeu.j2s.compilation.values.VariableNode; import me.topchetoeu.j2s.compilation.values.constants.BoolNode; import me.topchetoeu.j2s.compilation.values.operations.IndexNode; diff --git a/compilation/src/main/java/me/topchetoeu/j2s/compilation/control/DoWhileNode.java b/compilation/src/main/java/me/topchetoeu/j2s/compilation/control/DoWhileNode.java index 2ec5e78..ba4a626 100644 --- a/compilation/src/main/java/me/topchetoeu/j2s/compilation/control/DoWhileNode.java +++ b/compilation/src/main/java/me/topchetoeu/j2s/compilation/control/DoWhileNode.java @@ -1,16 +1,16 @@ package me.topchetoeu.j2s.compilation.control; import me.topchetoeu.j2s.common.Instruction; +import me.topchetoeu.j2s.common.Location; import me.topchetoeu.j2s.common.Instruction.BreakpointType; -import me.topchetoeu.j2s.common.parsing.Location; -import me.topchetoeu.j2s.common.parsing.ParseRes; -import me.topchetoeu.j2s.common.parsing.Parsing; -import me.topchetoeu.j2s.common.parsing.Source; import me.topchetoeu.j2s.compilation.CompileResult; import me.topchetoeu.j2s.compilation.DeferredIntSupplier; import me.topchetoeu.j2s.compilation.JavaScript; import me.topchetoeu.j2s.compilation.LabelContext; import me.topchetoeu.j2s.compilation.Node; +import me.topchetoeu.j2s.compilation.parsing.ParseRes; +import me.topchetoeu.j2s.compilation.parsing.Parsing; +import me.topchetoeu.j2s.compilation.parsing.Source; public class DoWhileNode extends Node { public final Node condition, body; diff --git a/compilation/src/main/java/me/topchetoeu/j2s/compilation/control/ForInNode.java b/compilation/src/main/java/me/topchetoeu/j2s/compilation/control/ForInNode.java index 4238059..a11bce8 100644 --- a/compilation/src/main/java/me/topchetoeu/j2s/compilation/control/ForInNode.java +++ b/compilation/src/main/java/me/topchetoeu/j2s/compilation/control/ForInNode.java @@ -1,16 +1,16 @@ package me.topchetoeu.j2s.compilation.control; import me.topchetoeu.j2s.common.Instruction; +import me.topchetoeu.j2s.common.Location; import me.topchetoeu.j2s.common.Instruction.BreakpointType; -import me.topchetoeu.j2s.common.parsing.Location; -import me.topchetoeu.j2s.common.parsing.ParseRes; -import me.topchetoeu.j2s.common.parsing.Parsing; -import me.topchetoeu.j2s.common.parsing.Source; import me.topchetoeu.j2s.compilation.CompileResult; import me.topchetoeu.j2s.compilation.DeferredIntSupplier; import me.topchetoeu.j2s.compilation.JavaScript; import me.topchetoeu.j2s.compilation.LabelContext; import me.topchetoeu.j2s.compilation.Node; +import me.topchetoeu.j2s.compilation.parsing.ParseRes; +import me.topchetoeu.j2s.compilation.parsing.Parsing; +import me.topchetoeu.j2s.compilation.parsing.Source; import me.topchetoeu.j2s.compilation.values.VariableNode; public class ForInNode extends Node { diff --git a/compilation/src/main/java/me/topchetoeu/j2s/compilation/control/ForNode.java b/compilation/src/main/java/me/topchetoeu/j2s/compilation/control/ForNode.java index 71ce3b8..f765b5b 100644 --- a/compilation/src/main/java/me/topchetoeu/j2s/compilation/control/ForNode.java +++ b/compilation/src/main/java/me/topchetoeu/j2s/compilation/control/ForNode.java @@ -1,17 +1,17 @@ package me.topchetoeu.j2s.compilation.control; import me.topchetoeu.j2s.common.Instruction; +import me.topchetoeu.j2s.common.Location; import me.topchetoeu.j2s.common.Instruction.BreakpointType; -import me.topchetoeu.j2s.common.parsing.Location; -import me.topchetoeu.j2s.common.parsing.ParseRes; -import me.topchetoeu.j2s.common.parsing.Parsing; -import me.topchetoeu.j2s.common.parsing.Source; import me.topchetoeu.j2s.compilation.CompileResult; import me.topchetoeu.j2s.compilation.DeferredIntSupplier; import me.topchetoeu.j2s.compilation.JavaScript; import me.topchetoeu.j2s.compilation.LabelContext; import me.topchetoeu.j2s.compilation.Node; import me.topchetoeu.j2s.compilation.VariableDeclareNode; +import me.topchetoeu.j2s.compilation.parsing.ParseRes; +import me.topchetoeu.j2s.compilation.parsing.Parsing; +import me.topchetoeu.j2s.compilation.parsing.Source; public class ForNode extends Node { public final Node declaration, assignment, condition, body; diff --git a/compilation/src/main/java/me/topchetoeu/j2s/compilation/control/IfNode.java b/compilation/src/main/java/me/topchetoeu/j2s/compilation/control/IfNode.java index 1b3f805..1d3b13a 100644 --- a/compilation/src/main/java/me/topchetoeu/j2s/compilation/control/IfNode.java +++ b/compilation/src/main/java/me/topchetoeu/j2s/compilation/control/IfNode.java @@ -1,16 +1,16 @@ package me.topchetoeu.j2s.compilation.control; import me.topchetoeu.j2s.common.Instruction; +import me.topchetoeu.j2s.common.Location; import me.topchetoeu.j2s.common.Instruction.BreakpointType; -import me.topchetoeu.j2s.common.parsing.Location; -import me.topchetoeu.j2s.common.parsing.ParseRes; -import me.topchetoeu.j2s.common.parsing.Parsing; -import me.topchetoeu.j2s.common.parsing.Source; import me.topchetoeu.j2s.compilation.CompileResult; import me.topchetoeu.j2s.compilation.DeferredIntSupplier; import me.topchetoeu.j2s.compilation.JavaScript; import me.topchetoeu.j2s.compilation.LabelContext; import me.topchetoeu.j2s.compilation.Node; +import me.topchetoeu.j2s.compilation.parsing.ParseRes; +import me.topchetoeu.j2s.compilation.parsing.Parsing; +import me.topchetoeu.j2s.compilation.parsing.Source; public class IfNode extends Node { public final Node condition, body, elseBody; diff --git a/compilation/src/main/java/me/topchetoeu/j2s/compilation/control/ReturnNode.java b/compilation/src/main/java/me/topchetoeu/j2s/compilation/control/ReturnNode.java index c5ee1b0..ebc4554 100644 --- a/compilation/src/main/java/me/topchetoeu/j2s/compilation/control/ReturnNode.java +++ b/compilation/src/main/java/me/topchetoeu/j2s/compilation/control/ReturnNode.java @@ -1,13 +1,13 @@ package me.topchetoeu.j2s.compilation.control; import me.topchetoeu.j2s.common.Instruction; -import me.topchetoeu.j2s.common.parsing.Location; -import me.topchetoeu.j2s.common.parsing.ParseRes; -import me.topchetoeu.j2s.common.parsing.Parsing; -import me.topchetoeu.j2s.common.parsing.Source; +import me.topchetoeu.j2s.common.Location; import me.topchetoeu.j2s.compilation.CompileResult; import me.topchetoeu.j2s.compilation.JavaScript; import me.topchetoeu.j2s.compilation.Node; +import me.topchetoeu.j2s.compilation.parsing.ParseRes; +import me.topchetoeu.j2s.compilation.parsing.Parsing; +import me.topchetoeu.j2s.compilation.parsing.Source; public class ReturnNode extends Node { public final Node value; diff --git a/compilation/src/main/java/me/topchetoeu/j2s/compilation/control/SwitchNode.java b/compilation/src/main/java/me/topchetoeu/j2s/compilation/control/SwitchNode.java index 8465ee1..fab72b3 100644 --- a/compilation/src/main/java/me/topchetoeu/j2s/compilation/control/SwitchNode.java +++ b/compilation/src/main/java/me/topchetoeu/j2s/compilation/control/SwitchNode.java @@ -4,17 +4,17 @@ import java.util.ArrayList; import java.util.HashMap; import me.topchetoeu.j2s.common.Instruction; +import me.topchetoeu.j2s.common.Location; import me.topchetoeu.j2s.common.Operation; import me.topchetoeu.j2s.common.Instruction.BreakpointType; -import me.topchetoeu.j2s.common.parsing.Location; -import me.topchetoeu.j2s.common.parsing.ParseRes; -import me.topchetoeu.j2s.common.parsing.Parsing; -import me.topchetoeu.j2s.common.parsing.Source; import me.topchetoeu.j2s.compilation.CompileResult; import me.topchetoeu.j2s.compilation.DeferredIntSupplier; import me.topchetoeu.j2s.compilation.JavaScript; import me.topchetoeu.j2s.compilation.LabelContext; import me.topchetoeu.j2s.compilation.Node; +import me.topchetoeu.j2s.compilation.parsing.ParseRes; +import me.topchetoeu.j2s.compilation.parsing.Parsing; +import me.topchetoeu.j2s.compilation.parsing.Source; public class SwitchNode extends Node { public static class SwitchCase { diff --git a/compilation/src/main/java/me/topchetoeu/j2s/compilation/control/ThrowNode.java b/compilation/src/main/java/me/topchetoeu/j2s/compilation/control/ThrowNode.java index 87e06f3..8ce24db 100644 --- a/compilation/src/main/java/me/topchetoeu/j2s/compilation/control/ThrowNode.java +++ b/compilation/src/main/java/me/topchetoeu/j2s/compilation/control/ThrowNode.java @@ -1,13 +1,13 @@ package me.topchetoeu.j2s.compilation.control; import me.topchetoeu.j2s.common.Instruction; -import me.topchetoeu.j2s.common.parsing.Location; -import me.topchetoeu.j2s.common.parsing.ParseRes; -import me.topchetoeu.j2s.common.parsing.Parsing; -import me.topchetoeu.j2s.common.parsing.Source; +import me.topchetoeu.j2s.common.Location; import me.topchetoeu.j2s.compilation.CompileResult; import me.topchetoeu.j2s.compilation.JavaScript; import me.topchetoeu.j2s.compilation.Node; +import me.topchetoeu.j2s.compilation.parsing.ParseRes; +import me.topchetoeu.j2s.compilation.parsing.Parsing; +import me.topchetoeu.j2s.compilation.parsing.Source; public class ThrowNode extends Node { public final Node value; diff --git a/compilation/src/main/java/me/topchetoeu/j2s/compilation/control/TryNode.java b/compilation/src/main/java/me/topchetoeu/j2s/compilation/control/TryNode.java index 68ea2da..027bda5 100644 --- a/compilation/src/main/java/me/topchetoeu/j2s/compilation/control/TryNode.java +++ b/compilation/src/main/java/me/topchetoeu/j2s/compilation/control/TryNode.java @@ -1,17 +1,17 @@ package me.topchetoeu.j2s.compilation.control; import me.topchetoeu.j2s.common.Instruction; +import me.topchetoeu.j2s.common.Location; import me.topchetoeu.j2s.common.Instruction.BreakpointType; -import me.topchetoeu.j2s.common.parsing.Location; -import me.topchetoeu.j2s.common.parsing.ParseRes; -import me.topchetoeu.j2s.common.parsing.Parsing; -import me.topchetoeu.j2s.common.parsing.Source; import me.topchetoeu.j2s.compilation.CompileResult; import me.topchetoeu.j2s.compilation.CompoundNode; import me.topchetoeu.j2s.compilation.DeferredIntSupplier; import me.topchetoeu.j2s.compilation.JavaScript; import me.topchetoeu.j2s.compilation.LabelContext; import me.topchetoeu.j2s.compilation.Node; +import me.topchetoeu.j2s.compilation.parsing.ParseRes; +import me.topchetoeu.j2s.compilation.parsing.Parsing; +import me.topchetoeu.j2s.compilation.parsing.Source; public class TryNode extends Node { public final CompoundNode tryBody; diff --git a/compilation/src/main/java/me/topchetoeu/j2s/compilation/control/WhileNode.java b/compilation/src/main/java/me/topchetoeu/j2s/compilation/control/WhileNode.java index b6e9136..d5d98aa 100644 --- a/compilation/src/main/java/me/topchetoeu/j2s/compilation/control/WhileNode.java +++ b/compilation/src/main/java/me/topchetoeu/j2s/compilation/control/WhileNode.java @@ -1,16 +1,16 @@ package me.topchetoeu.j2s.compilation.control; import me.topchetoeu.j2s.common.Instruction; +import me.topchetoeu.j2s.common.Location; import me.topchetoeu.j2s.common.Instruction.BreakpointType; -import me.topchetoeu.j2s.common.parsing.Location; -import me.topchetoeu.j2s.common.parsing.ParseRes; -import me.topchetoeu.j2s.common.parsing.Parsing; -import me.topchetoeu.j2s.common.parsing.Source; import me.topchetoeu.j2s.compilation.CompileResult; import me.topchetoeu.j2s.compilation.DeferredIntSupplier; import me.topchetoeu.j2s.compilation.JavaScript; import me.topchetoeu.j2s.compilation.LabelContext; import me.topchetoeu.j2s.compilation.Node; +import me.topchetoeu.j2s.compilation.parsing.ParseRes; +import me.topchetoeu.j2s.compilation.parsing.Parsing; +import me.topchetoeu.j2s.compilation.parsing.Source; public class WhileNode extends Node { public final Node condition, body; diff --git a/common/src/main/java/me/topchetoeu/j2s/common/json/JSON.java b/compilation/src/main/java/me/topchetoeu/j2s/compilation/json/JSON.java similarity index 78% rename from common/src/main/java/me/topchetoeu/j2s/common/json/JSON.java rename to compilation/src/main/java/me/topchetoeu/j2s/compilation/json/JSON.java index 1cf678b..7c4182b 100644 --- a/common/src/main/java/me/topchetoeu/j2s/common/json/JSON.java +++ b/compilation/src/main/java/me/topchetoeu/j2s/compilation/json/JSON.java @@ -1,16 +1,16 @@ -package me.topchetoeu.j2s.common.json; +package me.topchetoeu.j2s.compilation.json; -import java.math.BigDecimal; import java.util.HashMap; import java.util.stream.Collectors; +import me.topchetoeu.j2s.common.Filename; +import me.topchetoeu.j2s.common.Location; import me.topchetoeu.j2s.common.Metadata; +import me.topchetoeu.j2s.common.StringifyUtils; import me.topchetoeu.j2s.common.SyntaxException; -import me.topchetoeu.j2s.common.parsing.Filename; -import me.topchetoeu.j2s.common.parsing.Location; -import me.topchetoeu.j2s.common.parsing.ParseRes; -import me.topchetoeu.j2s.common.parsing.Parsing; -import me.topchetoeu.j2s.common.parsing.Source; +import me.topchetoeu.j2s.compilation.parsing.ParseRes; +import me.topchetoeu.j2s.compilation.parsing.Parsing; +import me.topchetoeu.j2s.compilation.parsing.Source; public class JSON { public static ParseRes parseString(Source src, int i) { @@ -110,37 +110,10 @@ public class JSON { } public static String stringify(JSONElement el) { - if (el.isNumber()) { - var d = el.number(); - if (d == Double.NEGATIVE_INFINITY) return "-Infinity"; - if (d == Double.POSITIVE_INFINITY) return "Infinity"; - if (Double.isNaN(d)) return "NaN"; - return BigDecimal.valueOf(d).stripTrailingZeros().toPlainString(); - } + if (el.isNumber()) return StringifyUtils.quoteNumber(el.number()); + if (el.isString()) return StringifyUtils.quoteString(el.string()); if (el.isBoolean()) return el.bool() ? "true" : "false"; if (el.isNull()) return "null"; - if (el.isString()) { - var res = new StringBuilder("\""); - var alphabet = "0123456789ABCDEF".toCharArray(); - - for (var c : el.string().toCharArray()) { - if (c < 32 || c >= 127) { - res - .append("\\u") - .append(alphabet[(c >> 12) & 0xF]) - .append(alphabet[(c >> 8) & 0xF]) - .append(alphabet[(c >> 4) & 0xF]) - .append(alphabet[(c >> 0) & 0xF]); - } - else if (c == '\\') - res.append("\\\\"); - else if (c == '"') - res.append("\\\""); - else res.append(c); - } - - return res.append('"').toString(); - } if (el.isList()) { var res = new StringBuilder().append("["); for (int i = 0; i < el.list().size(); i++) { @@ -156,7 +129,7 @@ public class JSON { for (int i = 0; i < entries.size(); i++) { if (i != 0) res.append(","); - res.append(stringify(JSONElement.string(entries.get(i).getKey()))); + res.append(StringifyUtils.quoteString(entries.get(i).getKey())); res.append(":"); res.append(stringify(entries.get(i).getValue())); } diff --git a/common/src/main/java/me/topchetoeu/j2s/common/json/JSONElement.java b/compilation/src/main/java/me/topchetoeu/j2s/compilation/json/JSONElement.java similarity index 98% rename from common/src/main/java/me/topchetoeu/j2s/common/json/JSONElement.java rename to compilation/src/main/java/me/topchetoeu/j2s/compilation/json/JSONElement.java index ad18e67..4cffab5 100644 --- a/common/src/main/java/me/topchetoeu/j2s/common/json/JSONElement.java +++ b/compilation/src/main/java/me/topchetoeu/j2s/compilation/json/JSONElement.java @@ -1,4 +1,4 @@ -package me.topchetoeu.j2s.common.json; +package me.topchetoeu.j2s.compilation.json; public class JSONElement { public static enum Type { diff --git a/common/src/main/java/me/topchetoeu/j2s/common/json/JSONList.java b/compilation/src/main/java/me/topchetoeu/j2s/compilation/json/JSONList.java similarity index 95% rename from common/src/main/java/me/topchetoeu/j2s/common/json/JSONList.java rename to compilation/src/main/java/me/topchetoeu/j2s/compilation/json/JSONList.java index 49a0c3b..ad333a1 100644 --- a/common/src/main/java/me/topchetoeu/j2s/common/json/JSONList.java +++ b/compilation/src/main/java/me/topchetoeu/j2s/compilation/json/JSONList.java @@ -1,4 +1,4 @@ -package me.topchetoeu.j2s.common.json; +package me.topchetoeu.j2s.compilation.json; import java.util.ArrayList; import java.util.Arrays; diff --git a/common/src/main/java/me/topchetoeu/j2s/common/json/JSONMap.java b/compilation/src/main/java/me/topchetoeu/j2s/compilation/json/JSONMap.java similarity index 99% rename from common/src/main/java/me/topchetoeu/j2s/common/json/JSONMap.java rename to compilation/src/main/java/me/topchetoeu/j2s/compilation/json/JSONMap.java index 7a9e39e..d17a363 100644 --- a/common/src/main/java/me/topchetoeu/j2s/common/json/JSONMap.java +++ b/compilation/src/main/java/me/topchetoeu/j2s/compilation/json/JSONMap.java @@ -1,4 +1,4 @@ -package me.topchetoeu.j2s.common.json; +package me.topchetoeu.j2s.compilation.json; import java.util.Collection; import java.util.HashMap; diff --git a/compilation/src/main/java/me/topchetoeu/j2s/compilation/members/FieldMemberNode.java b/compilation/src/main/java/me/topchetoeu/j2s/compilation/members/FieldMemberNode.java index d871a4d..0f3ec13 100644 --- a/compilation/src/main/java/me/topchetoeu/j2s/compilation/members/FieldMemberNode.java +++ b/compilation/src/main/java/me/topchetoeu/j2s/compilation/members/FieldMemberNode.java @@ -1,13 +1,13 @@ package me.topchetoeu.j2s.compilation.members; import me.topchetoeu.j2s.common.Instruction; -import me.topchetoeu.j2s.common.parsing.Location; -import me.topchetoeu.j2s.common.parsing.ParseRes; -import me.topchetoeu.j2s.common.parsing.Parsing; -import me.topchetoeu.j2s.common.parsing.Source; +import me.topchetoeu.j2s.common.Location; import me.topchetoeu.j2s.compilation.CompileResult; import me.topchetoeu.j2s.compilation.JavaScript; import me.topchetoeu.j2s.compilation.Node; +import me.topchetoeu.j2s.compilation.parsing.ParseRes; +import me.topchetoeu.j2s.compilation.parsing.Parsing; +import me.topchetoeu.j2s.compilation.parsing.Source; import me.topchetoeu.j2s.compilation.values.ObjectNode; public class FieldMemberNode implements Member { diff --git a/compilation/src/main/java/me/topchetoeu/j2s/compilation/members/Member.java b/compilation/src/main/java/me/topchetoeu/j2s/compilation/members/Member.java index c15adbd..755dc81 100644 --- a/compilation/src/main/java/me/topchetoeu/j2s/compilation/members/Member.java +++ b/compilation/src/main/java/me/topchetoeu/j2s/compilation/members/Member.java @@ -1,6 +1,6 @@ package me.topchetoeu.j2s.compilation.members; -import me.topchetoeu.j2s.common.parsing.Location; +import me.topchetoeu.j2s.common.Location; import me.topchetoeu.j2s.compilation.CompileResult; public interface Member { diff --git a/compilation/src/main/java/me/topchetoeu/j2s/compilation/members/PropertyMemberNode.java b/compilation/src/main/java/me/topchetoeu/j2s/compilation/members/PropertyMemberNode.java index dd32cb2..658b61b 100644 --- a/compilation/src/main/java/me/topchetoeu/j2s/compilation/members/PropertyMemberNode.java +++ b/compilation/src/main/java/me/topchetoeu/j2s/compilation/members/PropertyMemberNode.java @@ -3,16 +3,16 @@ package me.topchetoeu.j2s.compilation.members; import java.util.Arrays; import me.topchetoeu.j2s.common.Instruction; +import me.topchetoeu.j2s.common.Location; import me.topchetoeu.j2s.common.Instruction.BreakpointType; -import me.topchetoeu.j2s.common.parsing.Location; -import me.topchetoeu.j2s.common.parsing.ParseRes; -import me.topchetoeu.j2s.common.parsing.Parsing; -import me.topchetoeu.j2s.common.parsing.Source; import me.topchetoeu.j2s.compilation.CompileResult; import me.topchetoeu.j2s.compilation.CompoundNode; import me.topchetoeu.j2s.compilation.FunctionNode; import me.topchetoeu.j2s.compilation.JavaScript; import me.topchetoeu.j2s.compilation.Node; +import me.topchetoeu.j2s.compilation.parsing.ParseRes; +import me.topchetoeu.j2s.compilation.parsing.Parsing; +import me.topchetoeu.j2s.compilation.parsing.Source; import me.topchetoeu.j2s.compilation.values.ObjectNode; import me.topchetoeu.j2s.compilation.values.VariableNode; import me.topchetoeu.j2s.compilation.values.constants.StringNode; diff --git a/common/src/main/java/me/topchetoeu/j2s/common/parsing/ParseRes.java b/compilation/src/main/java/me/topchetoeu/j2s/compilation/parsing/ParseRes.java similarity index 96% rename from common/src/main/java/me/topchetoeu/j2s/common/parsing/ParseRes.java rename to compilation/src/main/java/me/topchetoeu/j2s/compilation/parsing/ParseRes.java index c8f22f3..24f41a6 100644 --- a/common/src/main/java/me/topchetoeu/j2s/common/parsing/ParseRes.java +++ b/compilation/src/main/java/me/topchetoeu/j2s/compilation/parsing/ParseRes.java @@ -1,4 +1,6 @@ -package me.topchetoeu.j2s.common.parsing; +package me.topchetoeu.j2s.compilation.parsing; + +import me.topchetoeu.j2s.common.Location; public class ParseRes { public static enum State { diff --git a/common/src/main/java/me/topchetoeu/j2s/common/parsing/Parser.java b/compilation/src/main/java/me/topchetoeu/j2s/compilation/parsing/Parser.java similarity index 62% rename from common/src/main/java/me/topchetoeu/j2s/common/parsing/Parser.java rename to compilation/src/main/java/me/topchetoeu/j2s/compilation/parsing/Parser.java index 7be6041..b8c49b0 100644 --- a/common/src/main/java/me/topchetoeu/j2s/common/parsing/Parser.java +++ b/compilation/src/main/java/me/topchetoeu/j2s/compilation/parsing/Parser.java @@ -1,4 +1,4 @@ -package me.topchetoeu.j2s.common.parsing; +package me.topchetoeu.j2s.compilation.parsing; public interface Parser { public ParseRes parse(Source src, int i); diff --git a/common/src/main/java/me/topchetoeu/j2s/common/parsing/Parsing.java b/compilation/src/main/java/me/topchetoeu/j2s/compilation/parsing/Parsing.java similarity index 96% rename from common/src/main/java/me/topchetoeu/j2s/common/parsing/Parsing.java rename to compilation/src/main/java/me/topchetoeu/j2s/compilation/parsing/Parsing.java index 3f0082f..a1c457d 100644 --- a/common/src/main/java/me/topchetoeu/j2s/common/parsing/Parsing.java +++ b/compilation/src/main/java/me/topchetoeu/j2s/compilation/parsing/Parsing.java @@ -1,6 +1,4 @@ -package me.topchetoeu.j2s.common.parsing; - -import me.topchetoeu.j2s.common.SyntaxException; +package me.topchetoeu.j2s.compilation.parsing; public class Parsing { public static boolean isDigit(Character c) { @@ -18,14 +16,13 @@ public class Parsing { } public static int skipEmpty(Source src, int i) { - return skipEmpty(src, i, true); - } - - public static int skipEmpty(Source src, int i, boolean noComments) { int n = 0; if (i == 0 && src.is(0, "#!")) { - while (!src.is(n, '\n')) n++; + while (!src.is(n, '\n')) { + if (n >= src.size()) return src.size(); + n++; + } n++; } @@ -88,7 +85,7 @@ public class Parsing { if (i + n >= src.size()) return ParseRes.error(src.loc(i), "Invalid hexadecimal escape sequence"); int val = fromHex(src.at(i + n)); - if (val == -1) throw new SyntaxException(src.loc(i + n), "Invalid hexadecimal escape sequence"); + if (val == -1) return ParseRes.error(src.loc(i + n), "Invalid hexadecimal escape sequence"); n++; newC = (newC << 4) | val; @@ -103,7 +100,7 @@ public class Parsing { if (i + n >= src.size()) return ParseRes.error(src.loc(i), "Invalid Unicode escape sequence"); int val = fromHex(src.at(i + n)); - if (val == -1) throw new SyntaxException(src.loc(i + n), "Invalid Unicode escape sequence"); + if (val == -1) return ParseRes.error(src.loc(i + n), "Invalid Unicode escape sequence"); n++; newC = (newC << 4) | val; diff --git a/common/src/main/java/me/topchetoeu/j2s/common/parsing/Source.java b/compilation/src/main/java/me/topchetoeu/j2s/compilation/parsing/Source.java similarity index 93% rename from common/src/main/java/me/topchetoeu/j2s/common/parsing/Source.java rename to compilation/src/main/java/me/topchetoeu/j2s/compilation/parsing/Source.java index abd3c92..a49ee21 100644 --- a/common/src/main/java/me/topchetoeu/j2s/common/parsing/Source.java +++ b/compilation/src/main/java/me/topchetoeu/j2s/compilation/parsing/Source.java @@ -1,7 +1,9 @@ -package me.topchetoeu.j2s.common.parsing; +package me.topchetoeu.j2s.compilation.parsing; import java.util.function.Predicate; +import me.topchetoeu.j2s.common.Filename; +import me.topchetoeu.j2s.common.Location; import me.topchetoeu.j2s.common.environment.Environment; public class Source { diff --git a/common/src/main/java/me/topchetoeu/j2s/common/parsing/SourceLocation.java b/compilation/src/main/java/me/topchetoeu/j2s/compilation/parsing/SourceLocation.java similarity index 91% rename from common/src/main/java/me/topchetoeu/j2s/common/parsing/SourceLocation.java rename to compilation/src/main/java/me/topchetoeu/j2s/compilation/parsing/SourceLocation.java index be9b083..f2e0490 100644 --- a/common/src/main/java/me/topchetoeu/j2s/common/parsing/SourceLocation.java +++ b/compilation/src/main/java/me/topchetoeu/j2s/compilation/parsing/SourceLocation.java @@ -1,7 +1,10 @@ -package me.topchetoeu.j2s.common.parsing; +package me.topchetoeu.j2s.compilation.parsing; import java.util.Objects; +import me.topchetoeu.j2s.common.Filename; +import me.topchetoeu.j2s.common.Location; + public class SourceLocation extends Location { private int[] lineStarts; private int line; diff --git a/compilation/src/main/java/me/topchetoeu/j2s/compilation/patterns/AssignTarget.java b/compilation/src/main/java/me/topchetoeu/j2s/compilation/patterns/AssignTarget.java index 676cad2..2f2f25e 100644 --- a/compilation/src/main/java/me/topchetoeu/j2s/compilation/patterns/AssignTarget.java +++ b/compilation/src/main/java/me/topchetoeu/j2s/compilation/patterns/AssignTarget.java @@ -1,6 +1,6 @@ package me.topchetoeu.j2s.compilation.patterns; -import me.topchetoeu.j2s.common.parsing.Location; +import me.topchetoeu.j2s.common.Location; import me.topchetoeu.j2s.compilation.CompileResult; /** diff --git a/compilation/src/main/java/me/topchetoeu/j2s/compilation/values/ArgumentsNode.java b/compilation/src/main/java/me/topchetoeu/j2s/compilation/values/ArgumentsNode.java index 4cdeb1e..52a8465 100644 --- a/compilation/src/main/java/me/topchetoeu/j2s/compilation/values/ArgumentsNode.java +++ b/compilation/src/main/java/me/topchetoeu/j2s/compilation/values/ArgumentsNode.java @@ -1,7 +1,7 @@ package me.topchetoeu.j2s.compilation.values; import me.topchetoeu.j2s.common.Instruction; -import me.topchetoeu.j2s.common.parsing.Location; +import me.topchetoeu.j2s.common.Location; import me.topchetoeu.j2s.compilation.CompileResult; import me.topchetoeu.j2s.compilation.Node; diff --git a/compilation/src/main/java/me/topchetoeu/j2s/compilation/values/ArrayNode.java b/compilation/src/main/java/me/topchetoeu/j2s/compilation/values/ArrayNode.java index 6525e4d..c166be5 100644 --- a/compilation/src/main/java/me/topchetoeu/j2s/compilation/values/ArrayNode.java +++ b/compilation/src/main/java/me/topchetoeu/j2s/compilation/values/ArrayNode.java @@ -3,13 +3,13 @@ package me.topchetoeu.j2s.compilation.values; import java.util.ArrayList; import me.topchetoeu.j2s.common.Instruction; -import me.topchetoeu.j2s.common.parsing.Location; -import me.topchetoeu.j2s.common.parsing.ParseRes; -import me.topchetoeu.j2s.common.parsing.Parsing; -import me.topchetoeu.j2s.common.parsing.Source; +import me.topchetoeu.j2s.common.Location; import me.topchetoeu.j2s.compilation.CompileResult; import me.topchetoeu.j2s.compilation.JavaScript; import me.topchetoeu.j2s.compilation.Node; +import me.topchetoeu.j2s.compilation.parsing.ParseRes; +import me.topchetoeu.j2s.compilation.parsing.Parsing; +import me.topchetoeu.j2s.compilation.parsing.Source; public class ArrayNode extends Node { diff --git a/compilation/src/main/java/me/topchetoeu/j2s/compilation/values/GlobalThisNode.java b/compilation/src/main/java/me/topchetoeu/j2s/compilation/values/GlobalThisNode.java index 5b6cd5c..823a9a8 100644 --- a/compilation/src/main/java/me/topchetoeu/j2s/compilation/values/GlobalThisNode.java +++ b/compilation/src/main/java/me/topchetoeu/j2s/compilation/values/GlobalThisNode.java @@ -1,7 +1,7 @@ package me.topchetoeu.j2s.compilation.values; import me.topchetoeu.j2s.common.Instruction; -import me.topchetoeu.j2s.common.parsing.Location; +import me.topchetoeu.j2s.common.Location; import me.topchetoeu.j2s.compilation.CompileResult; import me.topchetoeu.j2s.compilation.Node; diff --git a/compilation/src/main/java/me/topchetoeu/j2s/compilation/values/ObjectNode.java b/compilation/src/main/java/me/topchetoeu/j2s/compilation/values/ObjectNode.java index c234a4d..a39da13 100644 --- a/compilation/src/main/java/me/topchetoeu/j2s/compilation/values/ObjectNode.java +++ b/compilation/src/main/java/me/topchetoeu/j2s/compilation/values/ObjectNode.java @@ -4,16 +4,16 @@ import java.util.LinkedList; import java.util.List; import me.topchetoeu.j2s.common.Instruction; -import me.topchetoeu.j2s.common.parsing.Location; -import me.topchetoeu.j2s.common.parsing.ParseRes; -import me.topchetoeu.j2s.common.parsing.Parsing; -import me.topchetoeu.j2s.common.parsing.Source; +import me.topchetoeu.j2s.common.Location; import me.topchetoeu.j2s.compilation.CompileResult; import me.topchetoeu.j2s.compilation.JavaScript; import me.topchetoeu.j2s.compilation.Node; import me.topchetoeu.j2s.compilation.members.FieldMemberNode; import me.topchetoeu.j2s.compilation.members.Member; import me.topchetoeu.j2s.compilation.members.PropertyMemberNode; +import me.topchetoeu.j2s.compilation.parsing.ParseRes; +import me.topchetoeu.j2s.compilation.parsing.Parsing; +import me.topchetoeu.j2s.compilation.parsing.Source; import me.topchetoeu.j2s.compilation.values.constants.NumberNode; import me.topchetoeu.j2s.compilation.values.constants.StringNode; diff --git a/compilation/src/main/java/me/topchetoeu/j2s/compilation/values/RegexNode.java b/compilation/src/main/java/me/topchetoeu/j2s/compilation/values/RegexNode.java index 04b353c..fe0fbd7 100644 --- a/compilation/src/main/java/me/topchetoeu/j2s/compilation/values/RegexNode.java +++ b/compilation/src/main/java/me/topchetoeu/j2s/compilation/values/RegexNode.java @@ -1,12 +1,12 @@ package me.topchetoeu.j2s.compilation.values; import me.topchetoeu.j2s.common.Instruction; -import me.topchetoeu.j2s.common.parsing.Location; -import me.topchetoeu.j2s.common.parsing.ParseRes; -import me.topchetoeu.j2s.common.parsing.Parsing; -import me.topchetoeu.j2s.common.parsing.Source; +import me.topchetoeu.j2s.common.Location; import me.topchetoeu.j2s.compilation.CompileResult; import me.topchetoeu.j2s.compilation.Node; +import me.topchetoeu.j2s.compilation.parsing.ParseRes; +import me.topchetoeu.j2s.compilation.parsing.Parsing; +import me.topchetoeu.j2s.compilation.parsing.Source; public class RegexNode extends Node { public final String pattern, flags; diff --git a/compilation/src/main/java/me/topchetoeu/j2s/compilation/values/ThisNode.java b/compilation/src/main/java/me/topchetoeu/j2s/compilation/values/ThisNode.java index 77d53c8..8c323f4 100644 --- a/compilation/src/main/java/me/topchetoeu/j2s/compilation/values/ThisNode.java +++ b/compilation/src/main/java/me/topchetoeu/j2s/compilation/values/ThisNode.java @@ -1,7 +1,7 @@ package me.topchetoeu.j2s.compilation.values; import me.topchetoeu.j2s.common.Instruction; -import me.topchetoeu.j2s.common.parsing.Location; +import me.topchetoeu.j2s.common.Location; import me.topchetoeu.j2s.compilation.CompileResult; import me.topchetoeu.j2s.compilation.Node; diff --git a/compilation/src/main/java/me/topchetoeu/j2s/compilation/values/VariableNode.java b/compilation/src/main/java/me/topchetoeu/j2s/compilation/values/VariableNode.java index 0e8fe10..8c841c2 100644 --- a/compilation/src/main/java/me/topchetoeu/j2s/compilation/values/VariableNode.java +++ b/compilation/src/main/java/me/topchetoeu/j2s/compilation/values/VariableNode.java @@ -1,13 +1,13 @@ package me.topchetoeu.j2s.compilation.values; import me.topchetoeu.j2s.common.Instruction; -import me.topchetoeu.j2s.common.parsing.Location; -import me.topchetoeu.j2s.common.parsing.ParseRes; -import me.topchetoeu.j2s.common.parsing.Parsing; -import me.topchetoeu.j2s.common.parsing.Source; +import me.topchetoeu.j2s.common.Location; import me.topchetoeu.j2s.compilation.CompileResult; import me.topchetoeu.j2s.compilation.JavaScript; import me.topchetoeu.j2s.compilation.Node; +import me.topchetoeu.j2s.compilation.parsing.ParseRes; +import me.topchetoeu.j2s.compilation.parsing.Parsing; +import me.topchetoeu.j2s.compilation.parsing.Source; import me.topchetoeu.j2s.compilation.patterns.ChangeTarget; public class VariableNode extends Node implements ChangeTarget { diff --git a/compilation/src/main/java/me/topchetoeu/j2s/compilation/values/constants/BoolNode.java b/compilation/src/main/java/me/topchetoeu/j2s/compilation/values/constants/BoolNode.java index 19447eb..75a1960 100644 --- a/compilation/src/main/java/me/topchetoeu/j2s/compilation/values/constants/BoolNode.java +++ b/compilation/src/main/java/me/topchetoeu/j2s/compilation/values/constants/BoolNode.java @@ -1,7 +1,7 @@ package me.topchetoeu.j2s.compilation.values.constants; import me.topchetoeu.j2s.common.Instruction; -import me.topchetoeu.j2s.common.parsing.Location; +import me.topchetoeu.j2s.common.Location; import me.topchetoeu.j2s.compilation.CompileResult; import me.topchetoeu.j2s.compilation.Node; diff --git a/compilation/src/main/java/me/topchetoeu/j2s/compilation/values/constants/NullNode.java b/compilation/src/main/java/me/topchetoeu/j2s/compilation/values/constants/NullNode.java index b48ee3d..2038e28 100644 --- a/compilation/src/main/java/me/topchetoeu/j2s/compilation/values/constants/NullNode.java +++ b/compilation/src/main/java/me/topchetoeu/j2s/compilation/values/constants/NullNode.java @@ -1,7 +1,7 @@ package me.topchetoeu.j2s.compilation.values.constants; import me.topchetoeu.j2s.common.Instruction; -import me.topchetoeu.j2s.common.parsing.Location; +import me.topchetoeu.j2s.common.Location; import me.topchetoeu.j2s.compilation.CompileResult; import me.topchetoeu.j2s.compilation.Node; diff --git a/compilation/src/main/java/me/topchetoeu/j2s/compilation/values/constants/NumberNode.java b/compilation/src/main/java/me/topchetoeu/j2s/compilation/values/constants/NumberNode.java index 8003f09..ff60b56 100644 --- a/compilation/src/main/java/me/topchetoeu/j2s/compilation/values/constants/NumberNode.java +++ b/compilation/src/main/java/me/topchetoeu/j2s/compilation/values/constants/NumberNode.java @@ -1,12 +1,12 @@ package me.topchetoeu.j2s.compilation.values.constants; import me.topchetoeu.j2s.common.Instruction; -import me.topchetoeu.j2s.common.parsing.Location; -import me.topchetoeu.j2s.common.parsing.ParseRes; -import me.topchetoeu.j2s.common.parsing.Parsing; -import me.topchetoeu.j2s.common.parsing.Source; +import me.topchetoeu.j2s.common.Location; import me.topchetoeu.j2s.compilation.CompileResult; import me.topchetoeu.j2s.compilation.Node; +import me.topchetoeu.j2s.compilation.parsing.ParseRes; +import me.topchetoeu.j2s.compilation.parsing.Parsing; +import me.topchetoeu.j2s.compilation.parsing.Source; public class NumberNode extends Node { public final double value; diff --git a/compilation/src/main/java/me/topchetoeu/j2s/compilation/values/constants/StringNode.java b/compilation/src/main/java/me/topchetoeu/j2s/compilation/values/constants/StringNode.java index 05f3ffb..07ffa82 100644 --- a/compilation/src/main/java/me/topchetoeu/j2s/compilation/values/constants/StringNode.java +++ b/compilation/src/main/java/me/topchetoeu/j2s/compilation/values/constants/StringNode.java @@ -1,12 +1,12 @@ package me.topchetoeu.j2s.compilation.values.constants; import me.topchetoeu.j2s.common.Instruction; -import me.topchetoeu.j2s.common.parsing.Location; -import me.topchetoeu.j2s.common.parsing.ParseRes; -import me.topchetoeu.j2s.common.parsing.Parsing; -import me.topchetoeu.j2s.common.parsing.Source; +import me.topchetoeu.j2s.common.Location; import me.topchetoeu.j2s.compilation.CompileResult; import me.topchetoeu.j2s.compilation.Node; +import me.topchetoeu.j2s.compilation.parsing.ParseRes; +import me.topchetoeu.j2s.compilation.parsing.Parsing; +import me.topchetoeu.j2s.compilation.parsing.Source; public class StringNode extends Node { public final String value; diff --git a/compilation/src/main/java/me/topchetoeu/j2s/compilation/values/operations/AssignNode.java b/compilation/src/main/java/me/topchetoeu/j2s/compilation/values/operations/AssignNode.java index 2f95dc9..e295ae1 100644 --- a/compilation/src/main/java/me/topchetoeu/j2s/compilation/values/operations/AssignNode.java +++ b/compilation/src/main/java/me/topchetoeu/j2s/compilation/values/operations/AssignNode.java @@ -1,9 +1,9 @@ package me.topchetoeu.j2s.compilation.values.operations; import me.topchetoeu.j2s.common.Instruction; +import me.topchetoeu.j2s.common.Location; import me.topchetoeu.j2s.common.Operation; import me.topchetoeu.j2s.common.SyntaxException; -import me.topchetoeu.j2s.common.parsing.Location; import me.topchetoeu.j2s.compilation.CompileResult; import me.topchetoeu.j2s.compilation.Node; import me.topchetoeu.j2s.compilation.patterns.AssignTarget; diff --git a/compilation/src/main/java/me/topchetoeu/j2s/compilation/values/operations/CallNode.java b/compilation/src/main/java/me/topchetoeu/j2s/compilation/values/operations/CallNode.java index dfae0ed..912c8cf 100644 --- a/compilation/src/main/java/me/topchetoeu/j2s/compilation/values/operations/CallNode.java +++ b/compilation/src/main/java/me/topchetoeu/j2s/compilation/values/operations/CallNode.java @@ -3,14 +3,14 @@ package me.topchetoeu.j2s.compilation.values.operations; import java.util.ArrayList; import me.topchetoeu.j2s.common.Instruction; +import me.topchetoeu.j2s.common.Location; import me.topchetoeu.j2s.common.Instruction.BreakpointType; -import me.topchetoeu.j2s.common.parsing.Location; -import me.topchetoeu.j2s.common.parsing.ParseRes; -import me.topchetoeu.j2s.common.parsing.Parsing; -import me.topchetoeu.j2s.common.parsing.Source; import me.topchetoeu.j2s.compilation.CompileResult; import me.topchetoeu.j2s.compilation.JavaScript; import me.topchetoeu.j2s.compilation.Node; +import me.topchetoeu.j2s.compilation.parsing.ParseRes; +import me.topchetoeu.j2s.compilation.parsing.Parsing; +import me.topchetoeu.j2s.compilation.parsing.Source; public class CallNode extends Node { public final Node func; diff --git a/compilation/src/main/java/me/topchetoeu/j2s/compilation/values/operations/ChangeNode.java b/compilation/src/main/java/me/topchetoeu/j2s/compilation/values/operations/ChangeNode.java index 0ac0eb3..d409333 100644 --- a/compilation/src/main/java/me/topchetoeu/j2s/compilation/values/operations/ChangeNode.java +++ b/compilation/src/main/java/me/topchetoeu/j2s/compilation/values/operations/ChangeNode.java @@ -1,14 +1,14 @@ package me.topchetoeu.j2s.compilation.values.operations; import me.topchetoeu.j2s.common.Instruction; +import me.topchetoeu.j2s.common.Location; import me.topchetoeu.j2s.common.Operation; -import me.topchetoeu.j2s.common.parsing.Location; -import me.topchetoeu.j2s.common.parsing.ParseRes; -import me.topchetoeu.j2s.common.parsing.Parsing; -import me.topchetoeu.j2s.common.parsing.Source; import me.topchetoeu.j2s.compilation.CompileResult; import me.topchetoeu.j2s.compilation.JavaScript; import me.topchetoeu.j2s.compilation.Node; +import me.topchetoeu.j2s.compilation.parsing.ParseRes; +import me.topchetoeu.j2s.compilation.parsing.Parsing; +import me.topchetoeu.j2s.compilation.parsing.Source; import me.topchetoeu.j2s.compilation.patterns.ChangeTarget; import me.topchetoeu.j2s.compilation.values.constants.NumberNode; diff --git a/compilation/src/main/java/me/topchetoeu/j2s/compilation/values/operations/DiscardNode.java b/compilation/src/main/java/me/topchetoeu/j2s/compilation/values/operations/DiscardNode.java index cd40fc5..20dc5e5 100644 --- a/compilation/src/main/java/me/topchetoeu/j2s/compilation/values/operations/DiscardNode.java +++ b/compilation/src/main/java/me/topchetoeu/j2s/compilation/values/operations/DiscardNode.java @@ -1,13 +1,13 @@ package me.topchetoeu.j2s.compilation.values.operations; import me.topchetoeu.j2s.common.Instruction; -import me.topchetoeu.j2s.common.parsing.Location; -import me.topchetoeu.j2s.common.parsing.ParseRes; -import me.topchetoeu.j2s.common.parsing.Parsing; -import me.topchetoeu.j2s.common.parsing.Source; +import me.topchetoeu.j2s.common.Location; import me.topchetoeu.j2s.compilation.CompileResult; import me.topchetoeu.j2s.compilation.JavaScript; import me.topchetoeu.j2s.compilation.Node; +import me.topchetoeu.j2s.compilation.parsing.ParseRes; +import me.topchetoeu.j2s.compilation.parsing.Parsing; +import me.topchetoeu.j2s.compilation.parsing.Source; public class DiscardNode extends Node { diff --git a/compilation/src/main/java/me/topchetoeu/j2s/compilation/values/operations/IndexNode.java b/compilation/src/main/java/me/topchetoeu/j2s/compilation/values/operations/IndexNode.java index 7de4965..e6408de 100644 --- a/compilation/src/main/java/me/topchetoeu/j2s/compilation/values/operations/IndexNode.java +++ b/compilation/src/main/java/me/topchetoeu/j2s/compilation/values/operations/IndexNode.java @@ -1,14 +1,14 @@ package me.topchetoeu.j2s.compilation.values.operations; import me.topchetoeu.j2s.common.Instruction; +import me.topchetoeu.j2s.common.Location; import me.topchetoeu.j2s.common.Instruction.BreakpointType; -import me.topchetoeu.j2s.common.parsing.Location; -import me.topchetoeu.j2s.common.parsing.ParseRes; -import me.topchetoeu.j2s.common.parsing.Parsing; -import me.topchetoeu.j2s.common.parsing.Source; import me.topchetoeu.j2s.compilation.CompileResult; import me.topchetoeu.j2s.compilation.JavaScript; import me.topchetoeu.j2s.compilation.Node; +import me.topchetoeu.j2s.compilation.parsing.ParseRes; +import me.topchetoeu.j2s.compilation.parsing.Parsing; +import me.topchetoeu.j2s.compilation.parsing.Source; import me.topchetoeu.j2s.compilation.patterns.ChangeTarget; import me.topchetoeu.j2s.compilation.values.constants.NumberNode; import me.topchetoeu.j2s.compilation.values.constants.StringNode; diff --git a/compilation/src/main/java/me/topchetoeu/j2s/compilation/values/operations/LazyAndNode.java b/compilation/src/main/java/me/topchetoeu/j2s/compilation/values/operations/LazyAndNode.java index 529dcd3..6dc0f41 100644 --- a/compilation/src/main/java/me/topchetoeu/j2s/compilation/values/operations/LazyAndNode.java +++ b/compilation/src/main/java/me/topchetoeu/j2s/compilation/values/operations/LazyAndNode.java @@ -1,13 +1,13 @@ package me.topchetoeu.j2s.compilation.values.operations; import me.topchetoeu.j2s.common.Instruction; -import me.topchetoeu.j2s.common.parsing.Location; -import me.topchetoeu.j2s.common.parsing.ParseRes; -import me.topchetoeu.j2s.common.parsing.Parsing; -import me.topchetoeu.j2s.common.parsing.Source; +import me.topchetoeu.j2s.common.Location; import me.topchetoeu.j2s.compilation.CompileResult; import me.topchetoeu.j2s.compilation.JavaScript; import me.topchetoeu.j2s.compilation.Node; +import me.topchetoeu.j2s.compilation.parsing.ParseRes; +import me.topchetoeu.j2s.compilation.parsing.Parsing; +import me.topchetoeu.j2s.compilation.parsing.Source; public class LazyAndNode extends Node { public final Node first, second; diff --git a/compilation/src/main/java/me/topchetoeu/j2s/compilation/values/operations/LazyOrNode.java b/compilation/src/main/java/me/topchetoeu/j2s/compilation/values/operations/LazyOrNode.java index 807a7ed..370f258 100644 --- a/compilation/src/main/java/me/topchetoeu/j2s/compilation/values/operations/LazyOrNode.java +++ b/compilation/src/main/java/me/topchetoeu/j2s/compilation/values/operations/LazyOrNode.java @@ -1,13 +1,13 @@ package me.topchetoeu.j2s.compilation.values.operations; import me.topchetoeu.j2s.common.Instruction; -import me.topchetoeu.j2s.common.parsing.Location; -import me.topchetoeu.j2s.common.parsing.ParseRes; -import me.topchetoeu.j2s.common.parsing.Parsing; -import me.topchetoeu.j2s.common.parsing.Source; +import me.topchetoeu.j2s.common.Location; import me.topchetoeu.j2s.compilation.CompileResult; import me.topchetoeu.j2s.compilation.JavaScript; import me.topchetoeu.j2s.compilation.Node; +import me.topchetoeu.j2s.compilation.parsing.ParseRes; +import me.topchetoeu.j2s.compilation.parsing.Parsing; +import me.topchetoeu.j2s.compilation.parsing.Source; public class LazyOrNode extends Node { diff --git a/compilation/src/main/java/me/topchetoeu/j2s/compilation/values/operations/OperationNode.java b/compilation/src/main/java/me/topchetoeu/j2s/compilation/values/operations/OperationNode.java index 7887116..b27ffa3 100644 --- a/compilation/src/main/java/me/topchetoeu/j2s/compilation/values/operations/OperationNode.java +++ b/compilation/src/main/java/me/topchetoeu/j2s/compilation/values/operations/OperationNode.java @@ -6,14 +6,14 @@ import java.util.Map; import java.util.stream.Collectors; import me.topchetoeu.j2s.common.Instruction; +import me.topchetoeu.j2s.common.Location; import me.topchetoeu.j2s.common.Operation; -import me.topchetoeu.j2s.common.parsing.Location; -import me.topchetoeu.j2s.common.parsing.ParseRes; -import me.topchetoeu.j2s.common.parsing.Parsing; -import me.topchetoeu.j2s.common.parsing.Source; import me.topchetoeu.j2s.compilation.CompileResult; import me.topchetoeu.j2s.compilation.JavaScript; import me.topchetoeu.j2s.compilation.Node; +import me.topchetoeu.j2s.compilation.parsing.ParseRes; +import me.topchetoeu.j2s.compilation.parsing.Parsing; +import me.topchetoeu.j2s.compilation.parsing.Source; import me.topchetoeu.j2s.compilation.patterns.AssignTargetLike; import me.topchetoeu.j2s.compilation.patterns.ChangeTarget; diff --git a/compilation/src/main/java/me/topchetoeu/j2s/compilation/values/operations/PostfixNode.java b/compilation/src/main/java/me/topchetoeu/j2s/compilation/values/operations/PostfixNode.java index 1b7ae52..7308f1c 100644 --- a/compilation/src/main/java/me/topchetoeu/j2s/compilation/values/operations/PostfixNode.java +++ b/compilation/src/main/java/me/topchetoeu/j2s/compilation/values/operations/PostfixNode.java @@ -1,13 +1,13 @@ package me.topchetoeu.j2s.compilation.values.operations; import me.topchetoeu.j2s.common.Instruction; +import me.topchetoeu.j2s.common.Location; import me.topchetoeu.j2s.common.Operation; -import me.topchetoeu.j2s.common.parsing.Location; -import me.topchetoeu.j2s.common.parsing.ParseRes; -import me.topchetoeu.j2s.common.parsing.Parsing; -import me.topchetoeu.j2s.common.parsing.Source; import me.topchetoeu.j2s.compilation.CompileResult; import me.topchetoeu.j2s.compilation.Node; +import me.topchetoeu.j2s.compilation.parsing.ParseRes; +import me.topchetoeu.j2s.compilation.parsing.Parsing; +import me.topchetoeu.j2s.compilation.parsing.Source; import me.topchetoeu.j2s.compilation.patterns.ChangeTarget; import me.topchetoeu.j2s.compilation.values.constants.NumberNode; diff --git a/compilation/src/main/java/me/topchetoeu/j2s/compilation/values/operations/TypeofNode.java b/compilation/src/main/java/me/topchetoeu/j2s/compilation/values/operations/TypeofNode.java index d371240..eb4338b 100644 --- a/compilation/src/main/java/me/topchetoeu/j2s/compilation/values/operations/TypeofNode.java +++ b/compilation/src/main/java/me/topchetoeu/j2s/compilation/values/operations/TypeofNode.java @@ -1,13 +1,13 @@ package me.topchetoeu.j2s.compilation.values.operations; import me.topchetoeu.j2s.common.Instruction; -import me.topchetoeu.j2s.common.parsing.Location; -import me.topchetoeu.j2s.common.parsing.ParseRes; -import me.topchetoeu.j2s.common.parsing.Parsing; -import me.topchetoeu.j2s.common.parsing.Source; +import me.topchetoeu.j2s.common.Location; import me.topchetoeu.j2s.compilation.CompileResult; import me.topchetoeu.j2s.compilation.JavaScript; import me.topchetoeu.j2s.compilation.Node; +import me.topchetoeu.j2s.compilation.parsing.ParseRes; +import me.topchetoeu.j2s.compilation.parsing.Parsing; +import me.topchetoeu.j2s.compilation.parsing.Source; import me.topchetoeu.j2s.compilation.values.VariableNode; public class TypeofNode extends Node { diff --git a/compilation/src/main/java/me/topchetoeu/j2s/compilation/values/operations/VariableAssignNode.java b/compilation/src/main/java/me/topchetoeu/j2s/compilation/values/operations/VariableAssignNode.java index 5c758fe..d0b004b 100644 --- a/compilation/src/main/java/me/topchetoeu/j2s/compilation/values/operations/VariableAssignNode.java +++ b/compilation/src/main/java/me/topchetoeu/j2s/compilation/values/operations/VariableAssignNode.java @@ -1,8 +1,8 @@ package me.topchetoeu.j2s.compilation.values.operations; import me.topchetoeu.j2s.common.Instruction; +import me.topchetoeu.j2s.common.Location; import me.topchetoeu.j2s.common.Operation; -import me.topchetoeu.j2s.common.parsing.Location; import me.topchetoeu.j2s.compilation.CompileResult; import me.topchetoeu.j2s.compilation.FunctionNode; import me.topchetoeu.j2s.compilation.Node; diff --git a/common/src/test/java/me/topchetoeu/j2s/common/TestParseRes.java b/compilation/src/test/java/me/topchetoeu/j2s/compilation/TestParseRes.java similarity index 94% rename from common/src/test/java/me/topchetoeu/j2s/common/TestParseRes.java rename to compilation/src/test/java/me/topchetoeu/j2s/compilation/TestParseRes.java index a5ff158..bf56fba 100644 --- a/common/src/test/java/me/topchetoeu/j2s/common/TestParseRes.java +++ b/compilation/src/test/java/me/topchetoeu/j2s/compilation/TestParseRes.java @@ -1,12 +1,12 @@ -package me.topchetoeu.j2s.common; +package me.topchetoeu.j2s.compilation; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; import org.junit.jupiter.api.Test; -import me.topchetoeu.j2s.common.parsing.Location; -import me.topchetoeu.j2s.common.parsing.ParseRes; +import me.topchetoeu.j2s.common.Location; +import me.topchetoeu.j2s.compilation.parsing.ParseRes; public class TestParseRes { @Test public void testCreateFailed() { diff --git a/common/src/test/java/me/topchetoeu/j2s/common/TestSource.java b/compilation/src/test/java/me/topchetoeu/j2s/compilation/TestSource.java similarity index 92% rename from common/src/test/java/me/topchetoeu/j2s/common/TestSource.java rename to compilation/src/test/java/me/topchetoeu/j2s/compilation/TestSource.java index b4112bf..af2df3c 100644 --- a/common/src/test/java/me/topchetoeu/j2s/common/TestSource.java +++ b/compilation/src/test/java/me/topchetoeu/j2s/compilation/TestSource.java @@ -1,14 +1,14 @@ -package me.topchetoeu.j2s.common; +package me.topchetoeu.j2s.compilation; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; import org.junit.jupiter.api.Test; +import me.topchetoeu.j2s.common.Filename; +import me.topchetoeu.j2s.common.Location; import me.topchetoeu.j2s.common.environment.Environment; -import me.topchetoeu.j2s.common.parsing.Filename; -import me.topchetoeu.j2s.common.parsing.Location; -import me.topchetoeu.j2s.common.parsing.Source; +import me.topchetoeu.j2s.compilation.parsing.Source; public class TestSource { private Source mkSource(String src) { diff --git a/compilation/src/test/java/me/topchetoeu/j2s/compilation/parsing/TestParseString.java b/compilation/src/test/java/me/topchetoeu/j2s/compilation/parsing/TestParseString.java new file mode 100644 index 0000000..b4a013b --- /dev/null +++ b/compilation/src/test/java/me/topchetoeu/j2s/compilation/parsing/TestParseString.java @@ -0,0 +1,68 @@ +package me.topchetoeu.j2s.compilation.parsing; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import org.junit.jupiter.api.Test; + +import me.topchetoeu.j2s.compilation.parsing.Parsing; +import me.topchetoeu.j2s.compilation.parsing.Source; + +public class TestParseString { + @Test public void notAString() { + var res = Parsing.parseString(new Source("var a = 10"), 0); + assertEquals(true, res.isFailed()); + } + @Test public void simple() { + var src = new Source("\"this is a test\""); + var res = Parsing.parseString(src, 0); + assertEquals(true, res.isSuccess()); + assertEquals("this is a test", res.result); + assertEquals(16, res.n); + } + @Test public void simpleEscaped() { + var src = new Source("\'this\\\\ is \\n some \\'\\\"\\\n escapes for you :\\)\'"); + var res = Parsing.parseString(src, 0); + assertEquals(true, res.isSuccess()); + assertEquals("this\\ is \n some '\" escapes for you :)", res.result); + assertEquals(46, res.n); + } + @Test public void allEscaped() { + var src = new Source("'\\b\\t\\n\\f\\r\\0\\'\\x01\\u0123'"); + var res = Parsing.parseString(src, 0); + assertEquals(true, res.isSuccess()); + assertEquals("\b\t\n\f\r\0'\u0001\u0123", res.result); + assertEquals(26, res.n); + } + @Test public void shouldFailOctal() { + var res1 = Parsing.parseString(new Source("'\\012'"), 0); + assertEquals(true, res1.isError()); + + var res2 = Parsing.parseString(new Source("'\\123'"), 0); + assertEquals(true, res2.isError()); + } + @Test public void shouldFailIncompleteHex() { + var res1 = Parsing.parseString(new Source("'\\x"), 0); + assertEquals(true, res1.isError()); + + var res2 = Parsing.parseString(new Source("'\\x1turd"), 0); + assertEquals(true, res2.isError()); + + var res3 = Parsing.parseString(new Source("'\\xturd"), 0); + assertEquals(true, res3.isError()); + } + @Test public void shouldFailIncompleteUnicode() { + var res1 = Parsing.parseString(new Source("'\\u"), 0); + assertEquals(true, res1.isError()); + + var res2 = Parsing.parseString(new Source("'\\u123turd"), 0); + assertEquals(true, res2.isError()); + + var res3 = Parsing.parseString(new Source("'\\uturd"), 0); + assertEquals(true, res3.isError()); + } + @Test public void unterminated() { + var src = new Source("\"this is a test"); + var res = Parsing.parseString(src, 0); + assertEquals(true, res.isError()); + } +} diff --git a/compilation/src/test/java/me/topchetoeu/j2s/compilation/parsing/TestSkipWhite.java b/compilation/src/test/java/me/topchetoeu/j2s/compilation/parsing/TestSkipWhite.java new file mode 100644 index 0000000..cb20b6f --- /dev/null +++ b/compilation/src/test/java/me/topchetoeu/j2s/compilation/parsing/TestSkipWhite.java @@ -0,0 +1,51 @@ +package me.topchetoeu.j2s.compilation.parsing; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import org.junit.jupiter.api.Test; + +import me.topchetoeu.j2s.compilation.parsing.Parsing; +import me.topchetoeu.j2s.compilation.parsing.Source; + +public class TestSkipWhite { + @Test public void shBang() { + var res1 = Parsing.skipEmpty(new Source("#!my-shbang\n10"), 0); + assertEquals(12, res1); + + var res2 = Parsing.skipEmpty(new Source("#!fin"), 0); + assertEquals(5, res2); + } + @Test public void simple() { + var res1 = Parsing.skipEmpty(new Source("2134 45324"), 4); + assertEquals(3, res1); + + var res2 = Parsing.skipEmpty(new Source("2134 "), 4); + assertEquals(3, res2); + } + + @Test public void nothing() { + var res1 = Parsing.skipEmpty(new Source("12345678"), 4); + assertEquals(0, res1); + + var res2 = Parsing.skipEmpty(new Source("1234"), 4); + assertEquals(0, res2); + } + + @Test public void singleLineComment() { + var res1 = Parsing.skipEmpty(new Source("123// test\n54314214"), 3); + assertEquals(8, res1); + + var res2 = Parsing.skipEmpty(new Source("123// test"), 3); + assertEquals(7, res2); + } + @Test public void multilineComment() { + var res1 = Parsing.skipEmpty(new Source("123/*test*/54314214"), 3); + assertEquals(8, res1); + + var res2 = Parsing.skipEmpty(new Source("123/*test*/"), 3); + assertEquals(8, res2); + + var res3 = Parsing.skipEmpty(new Source("123/*test"), 3); + assertEquals(6, res3); + } +} diff --git a/runtime/src/main/java/me/topchetoeu/j2s/runtime/JSONConverter.java b/repl/src/main/java/me/topchetoeu/j2s/repl/JSONConverter.java similarity index 93% rename from runtime/src/main/java/me/topchetoeu/j2s/runtime/JSONConverter.java rename to repl/src/main/java/me/topchetoeu/j2s/repl/JSONConverter.java index 729078d..2b41004 100644 --- a/runtime/src/main/java/me/topchetoeu/j2s/runtime/JSONConverter.java +++ b/repl/src/main/java/me/topchetoeu/j2s/repl/JSONConverter.java @@ -1,12 +1,12 @@ -package me.topchetoeu.j2s.runtime; +package me.topchetoeu.j2s.repl; import java.util.HashSet; import java.util.stream.Collectors; import me.topchetoeu.j2s.common.environment.Environment; -import me.topchetoeu.j2s.common.json.JSONElement; -import me.topchetoeu.j2s.common.json.JSONList; -import me.topchetoeu.j2s.common.json.JSONMap; +import me.topchetoeu.j2s.compilation.json.JSONElement; +import me.topchetoeu.j2s.compilation.json.JSONList; +import me.topchetoeu.j2s.compilation.json.JSONMap; import me.topchetoeu.j2s.runtime.exceptions.EngineException; import me.topchetoeu.j2s.runtime.values.Value; import me.topchetoeu.j2s.runtime.values.objects.ArrayValue; diff --git a/repl/src/main/java/me/topchetoeu/j2s/repl/SimpleRepl.java b/repl/src/main/java/me/topchetoeu/j2s/repl/SimpleRepl.java index a726ef5..72cada8 100644 --- a/repl/src/main/java/me/topchetoeu/j2s/repl/SimpleRepl.java +++ b/repl/src/main/java/me/topchetoeu/j2s/repl/SimpleRepl.java @@ -16,14 +16,16 @@ import java.util.concurrent.ExecutionException; import java.util.regex.Pattern; import java.util.regex.PatternSyntaxException; +import me.topchetoeu.j2s.common.Filename; import me.topchetoeu.j2s.common.Metadata; import me.topchetoeu.j2s.common.Reading; import me.topchetoeu.j2s.common.SyntaxException; import me.topchetoeu.j2s.common.environment.Environment; import me.topchetoeu.j2s.common.environment.Key; -import me.topchetoeu.j2s.common.json.JSON; -import me.topchetoeu.j2s.common.parsing.Filename; import me.topchetoeu.j2s.compilation.JavaScript; +import me.topchetoeu.j2s.compilation.json.JSON; +import me.topchetoeu.j2s.compilation.parsing.Parsing; +import me.topchetoeu.j2s.compilation.parsing.Source; import me.topchetoeu.j2s.repl.debug.DebugServer; import me.topchetoeu.j2s.repl.debug.Debugger; import me.topchetoeu.j2s.repl.debug.SimpleDebugger; @@ -33,7 +35,6 @@ import me.topchetoeu.j2s.runtime.Compiler; import me.topchetoeu.j2s.runtime.Engine; import me.topchetoeu.j2s.runtime.EventLoop; import me.topchetoeu.j2s.runtime.Frame; -import me.topchetoeu.j2s.runtime.JSONConverter; import me.topchetoeu.j2s.runtime.debug.DebugContext; import me.topchetoeu.j2s.runtime.exceptions.EngineException; import me.topchetoeu.j2s.runtime.values.Value; @@ -385,13 +386,29 @@ public class SimpleRepl { if (num.isInt()) return num; else return NumberValue.of(num.getDouble() - num.getDouble() % 1); } - else return NumberValue.parseInt(args.get(0).toString(), radix, false); + else { + if (radix < 2 || radix > 36) return NumberValue.NAN; + + var str = args.get(0).toString().trim(); + var numRes = Parsing.parseInt(new Source(str), 0, "0123456789abcdefghijklmnopqrstuvwxyz".substring(0, radix), true); + if (numRes.isSuccess()) { + if (numRes.n == str.length()) return NumberValue.of(numRes.result); + } + return NumberValue.NAN; + } })); res.defineOwnField(env, "parseFloat", new NativeFunction(args -> { if (args.get(0) instanceof NumberValue) { return args.get(0); } - else return NumberValue.parseFloat(args.get(0).toString(), false); + else { + var str = args.get(0).toString().trim(); + var numRes = Parsing.parseFloat(new Source(str), 0, true); + if (numRes.isSuccess()) { + if (numRes.n == str.length()) return NumberValue.of(numRes.result); + } + return NumberValue.NAN; + } })); res.defineOwnField(env, "isNaN", new NativeFunction(args -> BoolValue.of(args.get(0).isNaN()))); diff --git a/repl/src/main/java/me/topchetoeu/j2s/repl/V8Error.java b/repl/src/main/java/me/topchetoeu/j2s/repl/V8Error.java index 9251ddc..dca7053 100644 --- a/repl/src/main/java/me/topchetoeu/j2s/repl/V8Error.java +++ b/repl/src/main/java/me/topchetoeu/j2s/repl/V8Error.java @@ -1,7 +1,7 @@ package me.topchetoeu.j2s.repl; -import me.topchetoeu.j2s.common.json.JSON; -import me.topchetoeu.j2s.common.json.JSONMap; +import me.topchetoeu.j2s.compilation.json.JSON; +import me.topchetoeu.j2s.compilation.json.JSONMap; public class V8Error { public final String message; diff --git a/repl/src/main/java/me/topchetoeu/j2s/repl/debug/DebugServer.java b/repl/src/main/java/me/topchetoeu/j2s/repl/debug/DebugServer.java index 63a691a..bc7d98c 100644 --- a/repl/src/main/java/me/topchetoeu/j2s/repl/debug/DebugServer.java +++ b/repl/src/main/java/me/topchetoeu/j2s/repl/debug/DebugServer.java @@ -12,9 +12,9 @@ import java.util.HashMap; import me.topchetoeu.j2s.common.Metadata; import me.topchetoeu.j2s.common.Reading; import me.topchetoeu.j2s.common.SyntaxException; -import me.topchetoeu.j2s.common.json.JSON; -import me.topchetoeu.j2s.common.json.JSONList; -import me.topchetoeu.j2s.common.json.JSONMap; +import me.topchetoeu.j2s.compilation.json.JSON; +import me.topchetoeu.j2s.compilation.json.JSONList; +import me.topchetoeu.j2s.compilation.json.JSONMap; import me.topchetoeu.j2s.repl.debug.WebSocketMessage.Type; public class DebugServer { diff --git a/repl/src/main/java/me/topchetoeu/j2s/repl/debug/SimpleDebugger.java b/repl/src/main/java/me/topchetoeu/j2s/repl/debug/SimpleDebugger.java index 793a722..596c7f9 100644 --- a/repl/src/main/java/me/topchetoeu/j2s/repl/debug/SimpleDebugger.java +++ b/repl/src/main/java/me/topchetoeu/j2s/repl/debug/SimpleDebugger.java @@ -11,25 +11,25 @@ import java.util.concurrent.ExecutionException; import java.util.regex.Pattern; import java.util.stream.Collectors; +import me.topchetoeu.j2s.common.Filename; import me.topchetoeu.j2s.common.FunctionBody; import me.topchetoeu.j2s.common.Instruction; +import me.topchetoeu.j2s.common.Location; import me.topchetoeu.j2s.common.Metadata; import me.topchetoeu.j2s.common.Instruction.BreakpointType; import me.topchetoeu.j2s.common.Instruction.Type; import me.topchetoeu.j2s.common.environment.Environment; -import me.topchetoeu.j2s.common.json.JSON; -import me.topchetoeu.j2s.common.json.JSONElement; -import me.topchetoeu.j2s.common.json.JSONList; -import me.topchetoeu.j2s.common.json.JSONMap; import me.topchetoeu.j2s.common.mapping.FunctionMap; -import me.topchetoeu.j2s.common.parsing.Filename; -import me.topchetoeu.j2s.common.parsing.Location; +import me.topchetoeu.j2s.compilation.json.JSON; +import me.topchetoeu.j2s.compilation.json.JSONElement; +import me.topchetoeu.j2s.compilation.json.JSONList; +import me.topchetoeu.j2s.compilation.json.JSONMap; +import me.topchetoeu.j2s.repl.JSONConverter; import me.topchetoeu.j2s.repl.SimpleRepl; import me.topchetoeu.j2s.runtime.Compiler; import me.topchetoeu.j2s.runtime.Engine; import me.topchetoeu.j2s.runtime.EventLoop; import me.topchetoeu.j2s.runtime.Frame; -import me.topchetoeu.j2s.runtime.JSONConverter; import me.topchetoeu.j2s.runtime.debug.DebugContext; import me.topchetoeu.j2s.runtime.exceptions.EngineException; import me.topchetoeu.j2s.runtime.values.Value; diff --git a/repl/src/main/java/me/topchetoeu/j2s/repl/debug/V8Error.java b/repl/src/main/java/me/topchetoeu/j2s/repl/debug/V8Error.java index 83e7d78..15b708b 100644 --- a/repl/src/main/java/me/topchetoeu/j2s/repl/debug/V8Error.java +++ b/repl/src/main/java/me/topchetoeu/j2s/repl/debug/V8Error.java @@ -1,7 +1,7 @@ package me.topchetoeu.j2s.repl.debug; -import me.topchetoeu.j2s.common.json.JSON; -import me.topchetoeu.j2s.common.json.JSONMap; +import me.topchetoeu.j2s.compilation.json.JSON; +import me.topchetoeu.j2s.compilation.json.JSONMap; public class V8Error { public final String message; diff --git a/repl/src/main/java/me/topchetoeu/j2s/repl/debug/V8Event.java b/repl/src/main/java/me/topchetoeu/j2s/repl/debug/V8Event.java index c4e3b1e..93db46f 100644 --- a/repl/src/main/java/me/topchetoeu/j2s/repl/debug/V8Event.java +++ b/repl/src/main/java/me/topchetoeu/j2s/repl/debug/V8Event.java @@ -1,7 +1,7 @@ package me.topchetoeu.j2s.repl.debug; -import me.topchetoeu.j2s.common.json.JSON; -import me.topchetoeu.j2s.common.json.JSONMap; +import me.topchetoeu.j2s.compilation.json.JSON; +import me.topchetoeu.j2s.compilation.json.JSONMap; public class V8Event { public final String name; diff --git a/repl/src/main/java/me/topchetoeu/j2s/repl/debug/V8Message.java b/repl/src/main/java/me/topchetoeu/j2s/repl/debug/V8Message.java index f607472..67a6f29 100644 --- a/repl/src/main/java/me/topchetoeu/j2s/repl/debug/V8Message.java +++ b/repl/src/main/java/me/topchetoeu/j2s/repl/debug/V8Message.java @@ -2,9 +2,9 @@ package me.topchetoeu.j2s.repl.debug; import java.util.Map; -import me.topchetoeu.j2s.common.json.JSON; -import me.topchetoeu.j2s.common.json.JSONElement; -import me.topchetoeu.j2s.common.json.JSONMap; +import me.topchetoeu.j2s.compilation.json.JSON; +import me.topchetoeu.j2s.compilation.json.JSONElement; +import me.topchetoeu.j2s.compilation.json.JSONMap; public class V8Message { public final String name; diff --git a/repl/src/main/java/me/topchetoeu/j2s/repl/debug/V8Result.java b/repl/src/main/java/me/topchetoeu/j2s/repl/debug/V8Result.java index 880e201..b7f5661 100644 --- a/repl/src/main/java/me/topchetoeu/j2s/repl/debug/V8Result.java +++ b/repl/src/main/java/me/topchetoeu/j2s/repl/debug/V8Result.java @@ -1,7 +1,7 @@ package me.topchetoeu.j2s.repl.debug; -import me.topchetoeu.j2s.common.json.JSON; -import me.topchetoeu.j2s.common.json.JSONMap; +import me.topchetoeu.j2s.compilation.json.JSON; +import me.topchetoeu.j2s.compilation.json.JSONMap; public class V8Result { public final int id; diff --git a/repl/src/main/java/me/topchetoeu/j2s/repl/mapping/NativeMapper.java b/repl/src/main/java/me/topchetoeu/j2s/repl/mapping/NativeMapper.java index 2d0486c..d2f2ee6 100644 --- a/repl/src/main/java/me/topchetoeu/j2s/repl/mapping/NativeMapper.java +++ b/repl/src/main/java/me/topchetoeu/j2s/repl/mapping/NativeMapper.java @@ -2,9 +2,9 @@ package me.topchetoeu.j2s.repl.mapping; import java.util.function.Function; +import me.topchetoeu.j2s.common.Filename; +import me.topchetoeu.j2s.common.Location; import me.topchetoeu.j2s.common.environment.Environment; -import me.topchetoeu.j2s.common.parsing.Filename; -import me.topchetoeu.j2s.common.parsing.Location; import me.topchetoeu.j2s.runtime.exceptions.EngineException; import me.topchetoeu.j2s.runtime.values.Value; import me.topchetoeu.j2s.runtime.values.functions.FunctionValue; diff --git a/runtime/src/main/java/me/topchetoeu/j2s/runtime/Compiler.java b/runtime/src/main/java/me/topchetoeu/j2s/runtime/Compiler.java index f2ec26d..1219706 100644 --- a/runtime/src/main/java/me/topchetoeu/j2s/runtime/Compiler.java +++ b/runtime/src/main/java/me/topchetoeu/j2s/runtime/Compiler.java @@ -2,10 +2,10 @@ package me.topchetoeu.j2s.runtime; import java.util.function.Function; +import me.topchetoeu.j2s.common.Filename; +import me.topchetoeu.j2s.common.Location; import me.topchetoeu.j2s.common.environment.Environment; import me.topchetoeu.j2s.common.environment.Key; -import me.topchetoeu.j2s.common.parsing.Filename; -import me.topchetoeu.j2s.common.parsing.Location; import me.topchetoeu.j2s.runtime.exceptions.EngineException; import me.topchetoeu.j2s.runtime.values.functions.FunctionValue; diff --git a/runtime/src/main/java/me/topchetoeu/j2s/runtime/EventLoop.java b/runtime/src/main/java/me/topchetoeu/j2s/runtime/EventLoop.java index d5a8305..401dceb 100644 --- a/runtime/src/main/java/me/topchetoeu/j2s/runtime/EventLoop.java +++ b/runtime/src/main/java/me/topchetoeu/j2s/runtime/EventLoop.java @@ -3,9 +3,9 @@ package me.topchetoeu.j2s.runtime; import java.util.concurrent.Future; import java.util.function.Supplier; +import me.topchetoeu.j2s.common.Filename; import me.topchetoeu.j2s.common.environment.Environment; import me.topchetoeu.j2s.common.environment.Key; -import me.topchetoeu.j2s.common.parsing.Filename; import me.topchetoeu.j2s.runtime.exceptions.EngineException; import me.topchetoeu.j2s.runtime.values.Value; import me.topchetoeu.j2s.runtime.values.functions.FunctionValue; diff --git a/runtime/src/main/java/me/topchetoeu/j2s/runtime/debug/DebugContext.java b/runtime/src/main/java/me/topchetoeu/j2s/runtime/debug/DebugContext.java index 3bbfe79..f7fe040 100644 --- a/runtime/src/main/java/me/topchetoeu/j2s/runtime/debug/DebugContext.java +++ b/runtime/src/main/java/me/topchetoeu/j2s/runtime/debug/DebugContext.java @@ -3,12 +3,12 @@ package me.topchetoeu.j2s.runtime.debug; import java.util.HashMap; import java.util.WeakHashMap; +import me.topchetoeu.j2s.common.Filename; import me.topchetoeu.j2s.common.FunctionBody; import me.topchetoeu.j2s.common.Instruction; import me.topchetoeu.j2s.common.environment.Environment; import me.topchetoeu.j2s.common.environment.Key; import me.topchetoeu.j2s.common.mapping.FunctionMap; -import me.topchetoeu.j2s.common.parsing.Filename; import me.topchetoeu.j2s.runtime.Frame; import me.topchetoeu.j2s.runtime.exceptions.EngineException; import me.topchetoeu.j2s.runtime.values.Value; diff --git a/runtime/src/main/java/me/topchetoeu/j2s/runtime/debug/DebugHandler.java b/runtime/src/main/java/me/topchetoeu/j2s/runtime/debug/DebugHandler.java index 5a559a5..f625cea 100644 --- a/runtime/src/main/java/me/topchetoeu/j2s/runtime/debug/DebugHandler.java +++ b/runtime/src/main/java/me/topchetoeu/j2s/runtime/debug/DebugHandler.java @@ -1,10 +1,10 @@ package me.topchetoeu.j2s.runtime.debug; +import me.topchetoeu.j2s.common.Filename; import me.topchetoeu.j2s.common.FunctionBody; import me.topchetoeu.j2s.common.Instruction; import me.topchetoeu.j2s.common.environment.Environment; import me.topchetoeu.j2s.common.mapping.FunctionMap; -import me.topchetoeu.j2s.common.parsing.Filename; import me.topchetoeu.j2s.runtime.Frame; import me.topchetoeu.j2s.runtime.exceptions.EngineException; import me.topchetoeu.j2s.runtime.values.Value; diff --git a/runtime/src/main/java/me/topchetoeu/j2s/runtime/exceptions/EngineException.java b/runtime/src/main/java/me/topchetoeu/j2s/runtime/exceptions/EngineException.java index 3322266..a39185c 100644 --- a/runtime/src/main/java/me/topchetoeu/j2s/runtime/exceptions/EngineException.java +++ b/runtime/src/main/java/me/topchetoeu/j2s/runtime/exceptions/EngineException.java @@ -3,8 +3,8 @@ package me.topchetoeu.j2s.runtime.exceptions; import java.util.ArrayList; import java.util.List; +import me.topchetoeu.j2s.common.Location; import me.topchetoeu.j2s.common.environment.Environment; -import me.topchetoeu.j2s.common.parsing.Location; import me.topchetoeu.j2s.runtime.values.Value; import me.topchetoeu.j2s.runtime.values.objects.ObjectValue; import me.topchetoeu.j2s.runtime.values.objects.ObjectValue.PrototypeProvider; diff --git a/runtime/src/main/java/me/topchetoeu/j2s/runtime/values/primitives/StringValue.java b/runtime/src/main/java/me/topchetoeu/j2s/runtime/values/primitives/StringValue.java index 64be39a..71ec9d6 100644 --- a/runtime/src/main/java/me/topchetoeu/j2s/runtime/values/primitives/StringValue.java +++ b/runtime/src/main/java/me/topchetoeu/j2s/runtime/values/primitives/StringValue.java @@ -7,11 +7,8 @@ import java.util.List; import java.util.Set; import java.util.WeakHashMap; +import me.topchetoeu.j2s.common.StringifyUtils; import me.topchetoeu.j2s.common.environment.Environment; -import me.topchetoeu.j2s.common.json.JSON; -import me.topchetoeu.j2s.common.json.JSONElement; -import me.topchetoeu.j2s.common.parsing.Parsing; -import me.topchetoeu.j2s.common.parsing.Source; import me.topchetoeu.j2s.runtime.values.KeyCache; import me.topchetoeu.j2s.runtime.values.Member; import me.topchetoeu.j2s.runtime.values.Member.FieldMember; @@ -29,10 +26,7 @@ public final class StringValue extends PrimitiveValue { @Override public NumberValue toNumber(Environment ext) { var val = value.trim(); if (val.equals("")) return NumberValue.of(0); - var res = Parsing.parseNumber(new Source(val), 0, true); - - if (res.isSuccess() && res.n == val.length()) return NumberValue.of(res.result); - else return NumberValue.NAN; + return NumberValue.of(StringifyUtils.unqoteNumber(val)); } @Override public String toString(Environment ext) { return value; } @@ -79,7 +73,7 @@ public final class StringValue extends PrimitiveValue { } @Override public List toReadableLines(Environment env, HashSet passed) { - return Arrays.asList(JSON.stringify(JSONElement.string(value))); + return Arrays.asList(StringifyUtils.quoteString(value)); } private StringValue(String value) { diff --git a/runtime/src/main/java/me/topchetoeu/j2s/runtime/values/primitives/numbers/DoubleValue.java b/runtime/src/main/java/me/topchetoeu/j2s/runtime/values/primitives/numbers/DoubleValue.java index bc90fea..8e51b4f 100644 --- a/runtime/src/main/java/me/topchetoeu/j2s/runtime/values/primitives/numbers/DoubleValue.java +++ b/runtime/src/main/java/me/topchetoeu/j2s/runtime/values/primitives/numbers/DoubleValue.java @@ -1,7 +1,6 @@ package me.topchetoeu.j2s.runtime.values.primitives.numbers; -import me.topchetoeu.j2s.common.json.JSON; -import me.topchetoeu.j2s.common.json.JSONElement; +import me.topchetoeu.j2s.common.StringifyUtils; public final class DoubleValue extends NumberValue { public final double value; @@ -22,7 +21,7 @@ public final class DoubleValue extends NumberValue { return value; } - @Override public String toString() { return JSON.stringify(JSONElement.number(value)); } + @Override public String toString() { return StringifyUtils.quoteNumber(value); } @Override public int hashCode() { return Double.hashCode(value); diff --git a/runtime/src/main/java/me/topchetoeu/j2s/runtime/values/primitives/numbers/NumberValue.java b/runtime/src/main/java/me/topchetoeu/j2s/runtime/values/primitives/numbers/NumberValue.java index d5cb285..69476f1 100644 --- a/runtime/src/main/java/me/topchetoeu/j2s/runtime/values/primitives/numbers/NumberValue.java +++ b/runtime/src/main/java/me/topchetoeu/j2s/runtime/values/primitives/numbers/NumberValue.java @@ -1,8 +1,6 @@ package me.topchetoeu.j2s.runtime.values.primitives.numbers; import me.topchetoeu.j2s.common.environment.Environment; -import me.topchetoeu.j2s.common.parsing.Parsing; -import me.topchetoeu.j2s.common.parsing.Source; import me.topchetoeu.j2s.runtime.values.objects.ObjectValue; import me.topchetoeu.j2s.runtime.values.primitives.PrimitiveValue; import me.topchetoeu.j2s.runtime.values.primitives.StringValue; @@ -31,25 +29,6 @@ public abstract class NumberValue extends PrimitiveValue { return env.get(NUMBER_PROTO); } - public static NumberValue parseInt(String str, int radix, boolean relaxed) { - if (radix < 2 || radix > 36) return NumberValue.NAN; - - str = str.trim(); - var res = Parsing.parseInt(new Source(str), 0, "0123456789abcdefghijklmnopqrstuvwxyz".substring(0, radix), true); - if (res.isSuccess()) { - if (relaxed || res.n == str.length()) return of(res.result); - } - return NumberValue.NAN; - } - public static NumberValue parseFloat(String str, boolean relaxed) { - str = str.trim(); - var res = Parsing.parseFloat(new Source(str), 0, true); - if (res.isSuccess()) { - if (relaxed || res.n == str.length()) return of(res.result); - } - return NumberValue.NAN; - } - public static NumberValue of(double value) { if (Double.isNaN(value)) return NAN; else if ((int)value == value) return new IntValue((int)value);