boono hai 11 meses
pai
achega
8d9d94c6a6

+ 0 - 10
src/main/java/xyz/kwiecien/jfuck/BFCompiler.java

@@ -12,7 +12,6 @@ import java.util.function.Consumer;
 
 import static java.lang.classfile.ClassFile.*;
 import static java.lang.constant.ConstantDescs.*;
-import static xyz.kwiecien.jfuck.operation.BytecodeConstants.DATA_SIZE_CONSTANT_NAME;
 
 public class BFCompiler {
     public static void main(String[] args) throws IOException {
@@ -28,9 +27,6 @@ public class BFCompiler {
         var code = Files.readString(path);
         var operations = new OperationExtractor().extract(code);
 
-        Consumer<CodeBuilder> initCode = cb -> cb
-                .aload(0)
-                .invokespecial(CD_Object, INIT_NAME, MTD_void).return_();
         Consumer<CodeBuilder> mainCode = cb -> {
             for (var operation : operations) {
                 operation.appendBytecode(cb);
@@ -40,13 +36,7 @@ public class BFCompiler {
 
         var bytes = ClassFile.of().build(ClassDesc.of("GenClass"), clb -> {
             clb.withFlags(ACC_PUBLIC);
-            clb.withField(DATA_SIZE_CONSTANT_NAME, CD_int, ACC_STATIC | ACC_FINAL);
             clb.withMethod(
-                            INIT_NAME,
-                            MTD_void,
-                            ACC_PUBLIC,
-                            mb -> mb.withCode(initCode))
-                    .withMethod(
                             "main",
                             MethodTypeDesc.of(CD_void, CD_String.arrayType()),
                             ACC_PUBLIC + ACC_STATIC,

+ 0 - 78
src/main/java/xyz/kwiecien/jfuck/BFMain.java

@@ -1,78 +0,0 @@
-package xyz.kwiecien.jfuck;
-
-import java.io.IOException;
-import java.nio.file.Files;
-import java.nio.file.Paths;
-import java.util.Scanner;
-import java.util.Stack;
-
-public class BFMain {
-    public static void main(String[] args) throws IOException {
-        if (args.length < 1) {
-            System.err.println("Usage: GenMain <filename>");
-            System.exit(1);
-        }
-        var path = Paths.get(args[0]);
-        if (!path.toFile().exists()) {
-            System.err.println("Unable to find file: " + args[0]);
-            System.exit(1);
-        }
-        var code = Files.readString(path);
-        var array = new byte[30000];
-        var ptr = 0;
-        var loopStartIndex = new Stack<Integer>();
-        var scanner = new Scanner(System.in);
-
-        for (int i = 0; i < code.length(); i++) {
-            var c = code.charAt(i);
-            switch (c) {
-                case '>':
-                    ptr++;
-                    if (ptr == array.length) {
-                        ptr = 0;
-                    }
-                    break;
-                case '<':
-                    ptr--;
-                    if (ptr == -1) {
-                        ptr = array.length - 1;
-                    }
-                    break;
-                case '+':
-                    array[ptr]++;
-                    break;
-                case '-':
-                    array[ptr]--;
-                    break;
-                case '.':
-                    System.out.print(new String(new byte[] {array[ptr]}));
-                    break;
-                case ',':
-                    array[ptr] = (byte) scanner.next().charAt(0);
-                    break;
-                case ']':
-                    i = loopStartIndex.pop();
-                    // pass-through to the '[' handling on purpose
-                case '[':
-                    if (array[ptr] > 0) {
-                        loopStartIndex.push(i);
-                        continue;
-                    }
-                    int nestingLevel = 0;
-                    while (true) {
-                        i++;
-                        char nextChar = code.charAt(i);
-                        if (nextChar == '[') {
-                            nestingLevel++;
-                        } else if (nextChar == ']' && nestingLevel == 0) {
-                            break;
-                        } else if (nextChar == ']') {
-                            nestingLevel--;
-                        }
-                    }
-                    break;
-            }
-        }
-
-    }
-}

+ 0 - 40
src/main/java/xyz/kwiecien/jfuck/SimpleReturnGenerator.java

@@ -1,40 +0,0 @@
-package xyz.kwiecien.jfuck;
-
-import java.io.IOException;
-import java.lang.classfile.ClassFile;
-import java.lang.classfile.CodeBuilder;
-import java.lang.constant.ClassDesc;
-import java.lang.constant.MethodTypeDesc;
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.util.function.Consumer;
-
-import static java.lang.constant.ConstantDescs.*;
-
-public class SimpleReturnGenerator {
-    public static void main(String[] args) throws IOException {
-        Consumer<CodeBuilder> initCode = cb -> cb
-                .aload(0)
-                .invokespecial(CD_Object, INIT_NAME, MTD_void).return_();
-        Consumer<CodeBuilder> mainCode = cb -> cb
-                .iconst_5()
-                .istore(1)
-                .iload(1)
-                .invokestatic(ClassDesc.of("java.lang", "System"), "exit", MethodTypeDesc.of(CD_void, CD_int))
-                .return_();
-
-        var bytes = ClassFile.of().build(ClassDesc.of("GenClass"), clb ->
-                clb.withFlags(ClassFile.ACC_PUBLIC)
-                        .withMethod(
-                                INIT_NAME,
-                                MTD_void,
-                                ClassFile.ACC_PUBLIC,
-                                mb -> mb.withCode(initCode))
-                        .withMethod(
-                                "main",
-                                MethodTypeDesc.of(CD_void, CD_String.arrayType()),
-                                ClassFile.ACC_PUBLIC + ClassFile.ACC_STATIC,
-                                mb -> mb.withCode(mainCode)));
-        Files.write(Path.of("/tmp/GenClass.class"), bytes);
-    }
-}

+ 0 - 8
src/main/java/xyz/kwiecien/jfuck/TestMain.java

@@ -1,8 +0,0 @@
-package xyz.kwiecien.jfuck;
-
-public class TestMain {
-    public static void main(String[] args) {
-        int result = 0;
-        System.exit(result);
-    }
-}

+ 0 - 1
src/main/java/xyz/kwiecien/jfuck/operation/BytecodeConstants.java

@@ -3,7 +3,6 @@ package xyz.kwiecien.jfuck.operation;
 import java.lang.constant.ClassDesc;
 
 public interface BytecodeConstants {
-    String DATA_SIZE_CONSTANT_NAME = "DATA_SIZE";
     int DATA_SIZE = 30000;
 
     int PTR_VAR_INDEX = 1;

+ 0 - 65
src/test/java/OperationsTest.java

@@ -1,65 +0,0 @@
-import org.junit.jupiter.api.Test;
-import xyz.kwiecien.jfuck.operation.*;
-
-import java.io.IOException;
-import java.lang.classfile.ClassFile;
-import java.lang.classfile.CodeBuilder;
-import java.lang.constant.ClassDesc;
-import java.lang.constant.MethodTypeDesc;
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.util.List;
-import java.util.function.Consumer;
-
-import static java.lang.classfile.ClassFile.*;
-import static java.lang.constant.ConstantDescs.*;
-import static xyz.kwiecien.jfuck.operation.BytecodeConstants.DATA_SIZE_CONSTANT_NAME;
-
-public class OperationsTest {
-    @Test
-    void testAdd() throws IOException {
-        Consumer<CodeBuilder> initCode = cb -> cb
-                .aload(0)
-                .invokespecial(CD_Object, INIT_NAME, MTD_void).return_();
-
-        //Full example of add - adding two numbers from stdin
-        Consumer<CodeBuilder> addCode = cb -> {
-            new Initialization().appendBytecode(cb);
-            new ReadOperation().appendBytecode(cb);
-            new ModifyPointerOperation(1).appendBytecode(cb);
-            new ModifyStackValueOperation((byte) 6).appendBytecode(cb);
-            new Loop(List.of(
-                    new ModifyPointerOperation(-1),
-                    new ModifyStackValueOperation((byte) -8),
-                    new ModifyPointerOperation(1),
-                    new ModifyStackValueOperation((byte) -1)
-            )).appendBytecode(cb);
-            new ReadOperation().appendBytecode(cb);
-            new Loop(List.of(
-                    new ModifyPointerOperation(-1),
-                    new ModifyStackValueOperation((byte) 1),
-                    new ModifyPointerOperation(1),
-                    new ModifyStackValueOperation((byte) -1)
-            )).appendBytecode(cb);
-            new ModifyPointerOperation(-1).appendBytecode(cb);
-            new WriteOperation().appendBytecode(cb);
-            cb.return_();
-        };
-
-        var bytes = ClassFile.of().build(ClassDesc.of("GenClass"), clb -> {
-            clb.withFlags(ACC_PUBLIC);
-            clb.withField(DATA_SIZE_CONSTANT_NAME, CD_int, ACC_STATIC | ACC_FINAL);
-            clb.withMethod(
-                            INIT_NAME,
-                            MTD_void,
-                            ACC_PUBLIC,
-                            mb -> mb.withCode(initCode))
-                    .withMethod(
-                            "main",
-                            MethodTypeDesc.of(CD_void, CD_String.arrayType()),
-                            ACC_PUBLIC + ACC_STATIC,
-                            mb -> mb.withCode(addCode));
-        });
-        Files.write(Path.of("/tmp/GenClass.class"), bytes);
-    }
-}