From 4212bec61f2daefb4a2c692cbfb58b750de27813 Mon Sep 17 00:00:00 2001 From: Jesper Saastamoinen Date: Tue, 17 Sep 2024 14:48:10 +0200 Subject: [PATCH] Added FileReader to stdlib Added FileReader to stdlib to read in files and return it as a string --- .gitignore | 3 +- hello_world.froj | 5 ++-- src/com/jsaasta/froj/Froj.java | 2 +- src/com/jsaasta/froj/stdlib/Clock.java | 5 +++- src/com/jsaasta/froj/stdlib/FileReader.java | 29 +++++++++++++++++++ src/com/jsaasta/froj/stdlib/Stdlib.java | 1 + .../froj/stdlib/StdlibRuntimeError.java | 11 +++++++ 7 files changed, 50 insertions(+), 6 deletions(-) create mode 100644 src/com/jsaasta/froj/stdlib/FileReader.java create mode 100644 src/com/jsaasta/froj/stdlib/StdlibRuntimeError.java diff --git a/.gitignore b/.gitignore index 00df01e..b682dd9 100644 --- a/.gitignore +++ b/.gitignore @@ -30,4 +30,5 @@ bin/ .class /src/*.jar -/.idea \ No newline at end of file +/.idea +hello_world.froj \ No newline at end of file diff --git a/hello_world.froj b/hello_world.froj index 266bb84..b8582c3 100644 --- a/hello_world.froj +++ b/hello_world.froj @@ -1,4 +1,3 @@ +var string = fileReader("..eogm"); - - -print "Hello world!"; \ No newline at end of file +print string; diff --git a/src/com/jsaasta/froj/Froj.java b/src/com/jsaasta/froj/Froj.java index 223e3f3..156beb2 100644 --- a/src/com/jsaasta/froj/Froj.java +++ b/src/com/jsaasta/froj/Froj.java @@ -74,7 +74,7 @@ public class Froj { } - static void error(int line, String message) { + public static void error(int line, String message) { report(line, "", message); } diff --git a/src/com/jsaasta/froj/stdlib/Clock.java b/src/com/jsaasta/froj/stdlib/Clock.java index 6029868..608e7ba 100644 --- a/src/com/jsaasta/froj/stdlib/Clock.java +++ b/src/com/jsaasta/froj/stdlib/Clock.java @@ -5,6 +5,9 @@ import com.jsaasta.froj.Interpreter; import java.util.List; +/** + * @return Returns current time in nanoSeconds / 1000; + */ public class Clock implements FrojCallable { @Override @@ -14,7 +17,7 @@ public class Clock implements FrojCallable { @Override public Object call(Interpreter interpreter, List arguments) { - return (double) System.currentTimeMillis() / 1000.0; + return (double) System.nanoTime() / 1000.0; } @Override diff --git a/src/com/jsaasta/froj/stdlib/FileReader.java b/src/com/jsaasta/froj/stdlib/FileReader.java new file mode 100644 index 0000000..c21714c --- /dev/null +++ b/src/com/jsaasta/froj/stdlib/FileReader.java @@ -0,0 +1,29 @@ +package com.jsaasta.froj.stdlib; + +import com.jsaasta.froj.Froj; +import com.jsaasta.froj.FrojCallable; +import com.jsaasta.froj.Interpreter; + +import java.io.IOException; +import java.nio.charset.Charset; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.util.List; + +public class FileReader implements FrojCallable { + @Override + public int arity() { + return 1; + } + + @Override + public Object call(Interpreter interpreter, List arguments) { + + try { + byte[] bytes = Files.readAllBytes(Paths.get((String) arguments.get(0))); + return new String(bytes, Charset.defaultCharset()); + } catch (IOException e) { + throw new StdlibRuntimeError("Couldn't find file: " + arguments.get(0)); + } + } +} diff --git a/src/com/jsaasta/froj/stdlib/Stdlib.java b/src/com/jsaasta/froj/stdlib/Stdlib.java index 4ce8c58..2ad7d0d 100644 --- a/src/com/jsaasta/froj/stdlib/Stdlib.java +++ b/src/com/jsaasta/froj/stdlib/Stdlib.java @@ -11,6 +11,7 @@ public class Stdlib { classes = new HashMap<>(); classes.put("clock", new Clock()); classes.put("input", new Input()); + classes.put("fileReader", new FileReader()); } public static Map define(){ diff --git a/src/com/jsaasta/froj/stdlib/StdlibRuntimeError.java b/src/com/jsaasta/froj/stdlib/StdlibRuntimeError.java new file mode 100644 index 0000000..842d286 --- /dev/null +++ b/src/com/jsaasta/froj/stdlib/StdlibRuntimeError.java @@ -0,0 +1,11 @@ +package com.jsaasta.froj.stdlib; + +import com.jsaasta.froj.Token; + +public class StdlibRuntimeError extends RuntimeException{ + + + public StdlibRuntimeError(String message) { + super(message, null, false, false); + } +}