diff --git a/.gitignore b/.gitignore
index 170088a..cebe78c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,6 +3,7 @@ coverage_html/
test
test.exe
test_cov
+fuzz
wl
wl.exe
wl_cov
\ No newline at end of file
diff --git a/Makefile b/Makefile
index 4f71308..64a14de 100644
--- a/Makefile
+++ b/Makefile
@@ -1,4 +1,7 @@
+AFL_CC ?= afl-clang-fast
+AFL_CXX ?= afl-clang-fast++
+
.PHONY: all coverage coverage_report install uninstall
all: wl
@@ -19,6 +22,19 @@ coverage_report:
lcov --remove coverage.info '/usr/*' --output-file coverage_filtered.info
genhtml coverage_filtered.info --output-directory coverage_html --title "WL Template Engine Coverage"
+fuzz: fuzz.c wl.c wl.h
+ $(AFL_CC) fuzz.c wl.c -o fuzz \
+ -g -O3 -Wall \
+ -fsanitize=address,undefined \
+ -fno-omit-frame-pointer
+
+bugs: fuzz
+ AFL_SKIP_CPUFREQ=1 afl-fuzz \
+ -i fuzz_input \
+ -o /tmp/fuzz_output \
+ -m none \
+ ./fuzz
+
install: wl
sudo cp wl /usr/local/bin
diff --git a/file.wl b/file.wl
index ffabf84..7fd74f0 100644
--- a/file.wl
+++ b/file.wl
@@ -1,5 +1,7 @@
-let username =
-
-Hello, my name is \escape(username)
+procedure page(title, lang)
+
+ \{title}
+
+page("Hello, world!", "it")
\ No newline at end of file
diff --git a/fuzz.c b/fuzz.c
new file mode 100644
index 0000000..a615897
--- /dev/null
+++ b/fuzz.c
@@ -0,0 +1,88 @@
+#include
+#include
+#include
+#include
+#include "wl.h"
+
+#define MAX_INPUT_SIZE (64 * 1024) // 64KB max input
+#define ARENA_SIZE (1 << 20) // 1MB arena
+
+// Persistent mode: AFL will call this loop many times without restarting
+__AFL_FUZZ_INIT();
+
+int main(int argc, char **argv)
+{
+ // Allocate arena once (outside the AFL loop)
+ char *mem = malloc(ARENA_SIZE);
+ if (mem == NULL) {
+ fprintf(stderr, "Failed to allocate memory\n");
+ return -1;
+ }
+
+ // Buffer for input
+ unsigned char *buf = __AFL_FUZZ_TESTCASE_BUF;
+
+#ifdef __AFL_HAVE_MANUAL_CONTROL
+ __AFL_INIT();
+#endif
+
+ // AFL persistent mode: loop up to 1000 times per process
+ while (__AFL_LOOP(1000)) {
+ int len = __AFL_FUZZ_TESTCASE_LEN;
+
+ // Limit input size
+ if (len > MAX_INPUT_SIZE) {
+ len = MAX_INPUT_SIZE;
+ }
+
+ // Reset arena for each iteration
+ WL_Arena arena = { mem, ARENA_SIZE, 0 };
+
+ // Initialize compiler
+ WL_Compiler *c = wl_compiler_init(&arena);
+ if (c == NULL) {
+ continue; // Out of memory, skip this input
+ }
+
+ // Try to compile the input
+ WL_AddResult res = wl_compiler_add(
+ c,
+ (WL_String) { "", 0 }, // empty path
+ (WL_String) { (char*)buf, len }
+ );
+
+ // If compilation succeeded, try to link
+ if (res.type == WL_ADD_LINK) {
+ WL_Program program;
+ int ret = wl_compiler_link(c, &program);
+
+ // If linking succeeded, optionally execute (for deeper fuzzing)
+ if (ret == 0) {
+ WL_Runtime *rt = wl_runtime_init(&arena, program);
+ if (rt != NULL) {
+ // Execute up to 1000 steps to avoid infinite loops
+ for (int i = 0; i < 1000; i++) {
+ WL_EvalResult eval_res = wl_runtime_eval(rt);
+
+ if (eval_res.type == WL_EVAL_DONE ||
+ eval_res.type == WL_EVAL_ERROR) {
+ break;
+ }
+
+ // Handle syscalls/sysvars by pushing dummy values
+ if (eval_res.type == WL_EVAL_SYSVAR) {
+ wl_push_s64(rt, 42);
+ } else if (eval_res.type == WL_EVAL_SYSCALL) {
+ wl_push_s64(rt, 42);
+ }
+ }
+ }
+ }
+ }
+
+ // Arena is automatically reset on next iteration
+ }
+
+ free(mem);
+ return 0;
+}
\ No newline at end of file
diff --git a/fuzz_input/000.wl b/fuzz_input/000.wl
new file mode 100644
index 0000000..56a6051
--- /dev/null
+++ b/fuzz_input/000.wl
@@ -0,0 +1 @@
+1
\ No newline at end of file
diff --git a/fuzz_input/001.wl b/fuzz_input/001.wl
new file mode 100644
index 0000000..e6adf3f
--- /dev/null
+++ b/fuzz_input/001.wl
@@ -0,0 +1 @@
+0.4
\ No newline at end of file
diff --git a/fuzz_input/002.wl b/fuzz_input/002.wl
new file mode 100644
index 0000000..c86c3f3
--- /dev/null
+++ b/fuzz_input/002.wl
@@ -0,0 +1 @@
+none
\ No newline at end of file
diff --git a/fuzz_input/003.wl b/fuzz_input/003.wl
new file mode 100644
index 0000000..f32a580
--- /dev/null
+++ b/fuzz_input/003.wl
@@ -0,0 +1 @@
+true
\ No newline at end of file
diff --git a/fuzz_input/004.wl b/fuzz_input/004.wl
new file mode 100644
index 0000000..02e4a84
--- /dev/null
+++ b/fuzz_input/004.wl
@@ -0,0 +1 @@
+false
\ No newline at end of file
diff --git a/fuzz_input/005.wl b/fuzz_input/005.wl
new file mode 100644
index 0000000..ea7e697
--- /dev/null
+++ b/fuzz_input/005.wl
@@ -0,0 +1 @@
+"Hello, world!"
\ No newline at end of file
diff --git a/fuzz_input/006.wl b/fuzz_input/006.wl
new file mode 100644
index 0000000..b0dc3a9
--- /dev/null
+++ b/fuzz_input/006.wl
@@ -0,0 +1 @@
+'Hello, world!'
\ No newline at end of file
diff --git a/fuzz_input/007.wl b/fuzz_input/007.wl
new file mode 100644
index 0000000..d58ac16
--- /dev/null
+++ b/fuzz_input/007.wl
@@ -0,0 +1 @@
+"\\"
\ No newline at end of file
diff --git a/fuzz_input/008.wl b/fuzz_input/008.wl
new file mode 100644
index 0000000..5a37384
--- /dev/null
+++ b/fuzz_input/008.wl
@@ -0,0 +1 @@
+"\n"
\ No newline at end of file
diff --git a/fuzz_input/009.wl b/fuzz_input/009.wl
new file mode 100644
index 0000000..c61f7f7
--- /dev/null
+++ b/fuzz_input/009.wl
@@ -0,0 +1 @@
+"\t"
\ No newline at end of file
diff --git a/fuzz_input/010.wl b/fuzz_input/010.wl
new file mode 100644
index 0000000..c9d1337
--- /dev/null
+++ b/fuzz_input/010.wl
@@ -0,0 +1 @@
+"\r"
\ No newline at end of file
diff --git a/fuzz_input/011.wl b/fuzz_input/011.wl
new file mode 100644
index 0000000..a3ec2ed
--- /dev/null
+++ b/fuzz_input/011.wl
@@ -0,0 +1 @@
+"\""
\ No newline at end of file
diff --git a/fuzz_input/012.wl b/fuzz_input/012.wl
new file mode 100644
index 0000000..4ba5e0c
--- /dev/null
+++ b/fuzz_input/012.wl
@@ -0,0 +1 @@
+"\'"
\ No newline at end of file
diff --git a/fuzz_input/013.wl b/fuzz_input/013.wl
new file mode 100644
index 0000000..e3f5885
--- /dev/null
+++ b/fuzz_input/013.wl
@@ -0,0 +1 @@
+"\xFF"
\ No newline at end of file
diff --git a/fuzz_input/014.wl b/fuzz_input/014.wl
new file mode 100644
index 0000000..08d82b1
--- /dev/null
+++ b/fuzz_input/014.wl
@@ -0,0 +1 @@
+"\x0F"
\ No newline at end of file
diff --git a/fuzz_input/015.wl b/fuzz_input/015.wl
new file mode 100644
index 0000000..607c9df
--- /dev/null
+++ b/fuzz_input/015.wl
@@ -0,0 +1 @@
+"\xF0"
\ No newline at end of file
diff --git a/fuzz_input/016.wl b/fuzz_input/016.wl
new file mode 100644
index 0000000..6001c44
--- /dev/null
+++ b/fuzz_input/016.wl
@@ -0,0 +1 @@
+[1, 2, 3]
\ No newline at end of file
diff --git a/fuzz_input/017.wl b/fuzz_input/017.wl
new file mode 100644
index 0000000..7d4e0b6
--- /dev/null
+++ b/fuzz_input/017.wl
@@ -0,0 +1 @@
++{}
\ No newline at end of file
diff --git a/fuzz_input/018.wl b/fuzz_input/018.wl
new file mode 100644
index 0000000..b8995c8
--- /dev/null
+++ b/fuzz_input/018.wl
@@ -0,0 +1 @@
++{a:1}
\ No newline at end of file
diff --git a/fuzz_input/019.wl b/fuzz_input/019.wl
new file mode 100644
index 0000000..33777b7
--- /dev/null
+++ b/fuzz_input/019.wl
@@ -0,0 +1 @@
++{a:1,b:2,c:3}
\ No newline at end of file
diff --git a/fuzz_input/020.wl b/fuzz_input/020.wl
new file mode 100644
index 0000000..a776f84
--- /dev/null
+++ b/fuzz_input/020.wl
@@ -0,0 +1 @@
+10-1-2
\ No newline at end of file
diff --git a/fuzz_input/021.wl b/fuzz_input/021.wl
new file mode 100644
index 0000000..9026c72
--- /dev/null
+++ b/fuzz_input/021.wl
@@ -0,0 +1 @@
+1+2*3
\ No newline at end of file
diff --git a/fuzz_input/022.wl b/fuzz_input/022.wl
new file mode 100644
index 0000000..255e0a0
--- /dev/null
+++ b/fuzz_input/022.wl
@@ -0,0 +1 @@
+(1+2)*3
\ No newline at end of file
diff --git a/fuzz_input/023.wl b/fuzz_input/023.wl
new file mode 100644
index 0000000..f2e4a85
--- /dev/null
+++ b/fuzz_input/023.wl
@@ -0,0 +1 @@
+1+(2*3)
\ No newline at end of file
diff --git a/fuzz_input/024.wl b/fuzz_input/024.wl
new file mode 100644
index 0000000..dc462db
--- /dev/null
+++ b/fuzz_input/024.wl
@@ -0,0 +1 @@
+1+2
\ No newline at end of file
diff --git a/fuzz_input/025.wl b/fuzz_input/025.wl
new file mode 100644
index 0000000..0709265
--- /dev/null
+++ b/fuzz_input/025.wl
@@ -0,0 +1 @@
+2-1
\ No newline at end of file
diff --git a/fuzz_input/026.wl b/fuzz_input/026.wl
new file mode 100644
index 0000000..21869de
--- /dev/null
+++ b/fuzz_input/026.wl
@@ -0,0 +1 @@
+1-2
\ No newline at end of file
diff --git a/fuzz_input/027.wl b/fuzz_input/027.wl
new file mode 100644
index 0000000..b60f154
--- /dev/null
+++ b/fuzz_input/027.wl
@@ -0,0 +1 @@
+2*3
\ No newline at end of file
diff --git a/fuzz_input/028.wl b/fuzz_input/028.wl
new file mode 100644
index 0000000..ffe913b
--- /dev/null
+++ b/fuzz_input/028.wl
@@ -0,0 +1 @@
+2/3
\ No newline at end of file
diff --git a/fuzz_input/029.wl b/fuzz_input/029.wl
new file mode 100644
index 0000000..5c2f2e6
--- /dev/null
+++ b/fuzz_input/029.wl
@@ -0,0 +1 @@
+4/2
\ No newline at end of file
diff --git a/fuzz_input/030.wl b/fuzz_input/030.wl
new file mode 100644
index 0000000..07f9b11
--- /dev/null
+++ b/fuzz_input/030.wl
@@ -0,0 +1 @@
+0%2
\ No newline at end of file
diff --git a/fuzz_input/031.wl b/fuzz_input/031.wl
new file mode 100644
index 0000000..9254b30
--- /dev/null
+++ b/fuzz_input/031.wl
@@ -0,0 +1 @@
+3%2
\ No newline at end of file
diff --git a/fuzz_input/032.wl b/fuzz_input/032.wl
new file mode 100644
index 0000000..43d8cc1
--- /dev/null
+++ b/fuzz_input/032.wl
@@ -0,0 +1 @@
+1.0+2.0
\ No newline at end of file
diff --git a/fuzz_input/033.wl b/fuzz_input/033.wl
new file mode 100644
index 0000000..e9223f8
--- /dev/null
+++ b/fuzz_input/033.wl
@@ -0,0 +1 @@
+2.0-1.0
\ No newline at end of file
diff --git a/fuzz_input/034.wl b/fuzz_input/034.wl
new file mode 100644
index 0000000..ce581bc
--- /dev/null
+++ b/fuzz_input/034.wl
@@ -0,0 +1 @@
+1.0-2.0
\ No newline at end of file
diff --git a/fuzz_input/035.wl b/fuzz_input/035.wl
new file mode 100644
index 0000000..a78b8b9
--- /dev/null
+++ b/fuzz_input/035.wl
@@ -0,0 +1 @@
+2.0*3.0
\ No newline at end of file
diff --git a/fuzz_input/036.wl b/fuzz_input/036.wl
new file mode 100644
index 0000000..c0bdc76
--- /dev/null
+++ b/fuzz_input/036.wl
@@ -0,0 +1 @@
+2.0/3.0
\ No newline at end of file
diff --git a/fuzz_input/037.wl b/fuzz_input/037.wl
new file mode 100644
index 0000000..6631e3a
--- /dev/null
+++ b/fuzz_input/037.wl
@@ -0,0 +1 @@
+4.0/2.0
\ No newline at end of file
diff --git a/fuzz_input/038.wl b/fuzz_input/038.wl
new file mode 100644
index 0000000..53a4a49
--- /dev/null
+++ b/fuzz_input/038.wl
@@ -0,0 +1 @@
+1+2.0
\ No newline at end of file
diff --git a/fuzz_input/039.wl b/fuzz_input/039.wl
new file mode 100644
index 0000000..85ef987
--- /dev/null
+++ b/fuzz_input/039.wl
@@ -0,0 +1 @@
+2-1.0
\ No newline at end of file
diff --git a/fuzz_input/040.wl b/fuzz_input/040.wl
new file mode 100644
index 0000000..c015124
--- /dev/null
+++ b/fuzz_input/040.wl
@@ -0,0 +1 @@
+1-2.0
\ No newline at end of file
diff --git a/fuzz_input/041.wl b/fuzz_input/041.wl
new file mode 100644
index 0000000..bb19f05
--- /dev/null
+++ b/fuzz_input/041.wl
@@ -0,0 +1 @@
+2*3.0
\ No newline at end of file
diff --git a/fuzz_input/042.wl b/fuzz_input/042.wl
new file mode 100644
index 0000000..4f8d89e
--- /dev/null
+++ b/fuzz_input/042.wl
@@ -0,0 +1 @@
+2/3.0
\ No newline at end of file
diff --git a/fuzz_input/043.wl b/fuzz_input/043.wl
new file mode 100644
index 0000000..c202218
--- /dev/null
+++ b/fuzz_input/043.wl
@@ -0,0 +1 @@
+4/2.0
\ No newline at end of file
diff --git a/fuzz_input/044.wl b/fuzz_input/044.wl
new file mode 100644
index 0000000..222155a
--- /dev/null
+++ b/fuzz_input/044.wl
@@ -0,0 +1 @@
+1.0+2
\ No newline at end of file
diff --git a/fuzz_input/045.wl b/fuzz_input/045.wl
new file mode 100644
index 0000000..2e2ad5b
--- /dev/null
+++ b/fuzz_input/045.wl
@@ -0,0 +1 @@
+2.0-1
\ No newline at end of file
diff --git a/fuzz_input/046.wl b/fuzz_input/046.wl
new file mode 100644
index 0000000..5a63cde
--- /dev/null
+++ b/fuzz_input/046.wl
@@ -0,0 +1 @@
+1.0-2
\ No newline at end of file
diff --git a/fuzz_input/047.wl b/fuzz_input/047.wl
new file mode 100644
index 0000000..7454964
--- /dev/null
+++ b/fuzz_input/047.wl
@@ -0,0 +1 @@
+2.0*3
\ No newline at end of file
diff --git a/fuzz_input/048.wl b/fuzz_input/048.wl
new file mode 100644
index 0000000..7bdbab6
--- /dev/null
+++ b/fuzz_input/048.wl
@@ -0,0 +1 @@
+2.0/3
\ No newline at end of file
diff --git a/fuzz_input/049.wl b/fuzz_input/049.wl
new file mode 100644
index 0000000..25c3b7a
--- /dev/null
+++ b/fuzz_input/049.wl
@@ -0,0 +1 @@
+4.0/2
\ No newline at end of file
diff --git a/fuzz_input/050.wl b/fuzz_input/050.wl
new file mode 100644
index 0000000..e4ae5e6
--- /dev/null
+++ b/fuzz_input/050.wl
@@ -0,0 +1 @@
+len []
\ No newline at end of file
diff --git a/fuzz_input/051.wl b/fuzz_input/051.wl
new file mode 100644
index 0000000..7549890
--- /dev/null
+++ b/fuzz_input/051.wl
@@ -0,0 +1 @@
+len [1, 2, 3]
\ No newline at end of file
diff --git a/fuzz_input/052.wl b/fuzz_input/052.wl
new file mode 100644
index 0000000..bac6643
--- /dev/null
+++ b/fuzz_input/052.wl
@@ -0,0 +1 @@
+len {}
\ No newline at end of file
diff --git a/fuzz_input/053.wl b/fuzz_input/053.wl
new file mode 100644
index 0000000..b3260ba
--- /dev/null
+++ b/fuzz_input/053.wl
@@ -0,0 +1 @@
+len {a:1}
\ No newline at end of file
diff --git a/fuzz_input/054.wl b/fuzz_input/054.wl
new file mode 100644
index 0000000..060eb36
--- /dev/null
+++ b/fuzz_input/054.wl
@@ -0,0 +1 @@
+len {a:1,b:2,c:3}
\ No newline at end of file
diff --git a/fuzz_input/055.wl b/fuzz_input/055.wl
new file mode 100644
index 0000000..ceba9a0
--- /dev/null
+++ b/fuzz_input/055.wl
@@ -0,0 +1 @@
+-12
\ No newline at end of file
diff --git a/fuzz_input/056.wl b/fuzz_input/056.wl
new file mode 100644
index 0000000..e882bae
--- /dev/null
+++ b/fuzz_input/056.wl
@@ -0,0 +1 @@
+-12.34
\ No newline at end of file
diff --git a/fuzz_input/057.wl b/fuzz_input/057.wl
new file mode 100644
index 0000000..3a66ce3
--- /dev/null
+++ b/fuzz_input/057.wl
@@ -0,0 +1 @@
+1<2
\ No newline at end of file
diff --git a/fuzz_input/058.wl b/fuzz_input/058.wl
new file mode 100644
index 0000000..657f614
--- /dev/null
+++ b/fuzz_input/058.wl
@@ -0,0 +1 @@
+2<1
\ No newline at end of file
diff --git a/fuzz_input/059.wl b/fuzz_input/059.wl
new file mode 100644
index 0000000..83a09da
--- /dev/null
+++ b/fuzz_input/059.wl
@@ -0,0 +1 @@
+1>2
\ No newline at end of file
diff --git a/fuzz_input/060.wl b/fuzz_input/060.wl
new file mode 100644
index 0000000..e039061
--- /dev/null
+++ b/fuzz_input/060.wl
@@ -0,0 +1 @@
+2>1
\ No newline at end of file
diff --git a/fuzz_input/061.wl b/fuzz_input/061.wl
new file mode 100644
index 0000000..dd37c92
--- /dev/null
+++ b/fuzz_input/061.wl
@@ -0,0 +1 @@
+1==1
\ No newline at end of file
diff --git a/fuzz_input/062.wl b/fuzz_input/062.wl
new file mode 100644
index 0000000..4146577
--- /dev/null
+++ b/fuzz_input/062.wl
@@ -0,0 +1 @@
+1==2
\ No newline at end of file
diff --git a/fuzz_input/063.wl b/fuzz_input/063.wl
new file mode 100644
index 0000000..6ca3718
--- /dev/null
+++ b/fuzz_input/063.wl
@@ -0,0 +1 @@
+1!=1
\ No newline at end of file
diff --git a/fuzz_input/064.wl b/fuzz_input/064.wl
new file mode 100644
index 0000000..f042b81
--- /dev/null
+++ b/fuzz_input/064.wl
@@ -0,0 +1 @@
+1!=2
\ No newline at end of file
diff --git a/fuzz_input/065.wl b/fuzz_input/065.wl
new file mode 100644
index 0000000..c6cc154
--- /dev/null
+++ b/fuzz_input/065.wl
@@ -0,0 +1,2 @@
+let a = 1
+a
\ No newline at end of file
diff --git a/fuzz_input/066.wl b/fuzz_input/066.wl
new file mode 100644
index 0000000..cedcec9
--- /dev/null
+++ b/fuzz_input/066.wl
@@ -0,0 +1,3 @@
+let a = 1
+a = 2
+a
\ No newline at end of file
diff --git a/fuzz_input/067.wl b/fuzz_input/067.wl
new file mode 100644
index 0000000..3e63451
--- /dev/null
+++ b/fuzz_input/067.wl
@@ -0,0 +1 @@
+[5, 6, 7][0]
\ No newline at end of file
diff --git a/fuzz_input/068.wl b/fuzz_input/068.wl
new file mode 100644
index 0000000..798ffa1
--- /dev/null
+++ b/fuzz_input/068.wl
@@ -0,0 +1 @@
+[5, 6, 7][1]
\ No newline at end of file
diff --git a/fuzz_input/069.wl b/fuzz_input/069.wl
new file mode 100644
index 0000000..c16a699
--- /dev/null
+++ b/fuzz_input/069.wl
@@ -0,0 +1 @@
+[5, 6, 7][2]
\ No newline at end of file
diff --git a/fuzz_input/070.wl b/fuzz_input/070.wl
new file mode 100644
index 0000000..50d8cca
--- /dev/null
+++ b/fuzz_input/070.wl
@@ -0,0 +1 @@
++{a:5,b:6,c:7}.a
\ No newline at end of file
diff --git a/fuzz_input/071.wl b/fuzz_input/071.wl
new file mode 100644
index 0000000..26870d3
--- /dev/null
+++ b/fuzz_input/071.wl
@@ -0,0 +1 @@
++{a:5,b:6,c:7}.b
\ No newline at end of file
diff --git a/fuzz_input/072.wl b/fuzz_input/072.wl
new file mode 100644
index 0000000..bdc2bbe
--- /dev/null
+++ b/fuzz_input/072.wl
@@ -0,0 +1 @@
++{a:5,b:6,c:7}.c
\ No newline at end of file
diff --git a/fuzz_input/073.wl b/fuzz_input/073.wl
new file mode 100644
index 0000000..bdac03c
--- /dev/null
+++ b/fuzz_input/073.wl
@@ -0,0 +1 @@
++{a:5,b:6,c:7}['a']
\ No newline at end of file
diff --git a/fuzz_input/074.wl b/fuzz_input/074.wl
new file mode 100644
index 0000000..4558126
--- /dev/null
+++ b/fuzz_input/074.wl
@@ -0,0 +1 @@
++{a:5,b:6,c:7}['b']
\ No newline at end of file
diff --git a/fuzz_input/075.wl b/fuzz_input/075.wl
new file mode 100644
index 0000000..00a448d
--- /dev/null
+++ b/fuzz_input/075.wl
@@ -0,0 +1 @@
++{a:5,b:6,c:7}['c']
\ No newline at end of file
diff --git a/fuzz_input/076.wl b/fuzz_input/076.wl
new file mode 100644
index 0000000..ce77d94
--- /dev/null
+++ b/fuzz_input/076.wl
@@ -0,0 +1,5 @@
+let x = 1
+{
+ let x = 2
+ x
+}
\ No newline at end of file
diff --git a/fuzz_input/077.wl b/fuzz_input/077.wl
new file mode 100644
index 0000000..5cdb797
--- /dev/null
+++ b/fuzz_input/077.wl
@@ -0,0 +1,3 @@
+let x = {a:5,b:6,c:7}
+x.a = true
+x
\ No newline at end of file
diff --git a/fuzz_input/078.wl b/fuzz_input/078.wl
new file mode 100644
index 0000000..4fdb903
--- /dev/null
+++ b/fuzz_input/078.wl
@@ -0,0 +1,3 @@
+let x = {a:5,b:6,c:7}
+x.b = true
+x
\ No newline at end of file
diff --git a/fuzz_input/079.wl b/fuzz_input/079.wl
new file mode 100644
index 0000000..42107ed
--- /dev/null
+++ b/fuzz_input/079.wl
@@ -0,0 +1,3 @@
+let x = {a:5,b:6,c:7}
+x.c = true
+x
\ No newline at end of file
diff --git a/fuzz_input/080.wl b/fuzz_input/080.wl
new file mode 100644
index 0000000..72e3a37
--- /dev/null
+++ b/fuzz_input/080.wl
@@ -0,0 +1,3 @@
+let x = {a:5,b:6,c:7}
+x['a'] = true
+x
\ No newline at end of file
diff --git a/fuzz_input/081.wl b/fuzz_input/081.wl
new file mode 100644
index 0000000..1aa841f
--- /dev/null
+++ b/fuzz_input/081.wl
@@ -0,0 +1,3 @@
+let x = {a:5,b:6,c:7}
+x['b'] = true
+x
diff --git a/fuzz_input/082.wl b/fuzz_input/082.wl
new file mode 100644
index 0000000..5e4c950
--- /dev/null
+++ b/fuzz_input/082.wl
@@ -0,0 +1,3 @@
+let x = {a:5,b:6,c:7}
+x['c'] = true
+x
\ No newline at end of file
diff --git a/fuzz_input/083.wl b/fuzz_input/083.wl
new file mode 100644
index 0000000..df8a708
--- /dev/null
+++ b/fuzz_input/083.wl
@@ -0,0 +1,4 @@
+let a
+let b
+let c
+a = b = c = 5
\ No newline at end of file
diff --git a/fuzz_input/084.wl b/fuzz_input/084.wl
new file mode 100644
index 0000000..d9eee96
--- /dev/null
+++ b/fuzz_input/084.wl
@@ -0,0 +1,7 @@
+let a
+let b
+let c
+a = b = c = 5
+a
+b
+c
\ No newline at end of file
diff --git a/fuzz_input/085.wl b/fuzz_input/085.wl
new file mode 100644
index 0000000..aabfd74
--- /dev/null
+++ b/fuzz_input/085.wl
@@ -0,0 +1,3 @@
+if 1 < 2:
+ 1
+2
\ No newline at end of file
diff --git a/fuzz_input/086.wl b/fuzz_input/086.wl
new file mode 100644
index 0000000..64fa3dc
--- /dev/null
+++ b/fuzz_input/086.wl
@@ -0,0 +1,3 @@
+if 1 > 2:
+ 1
+2
\ No newline at end of file
diff --git a/fuzz_input/087.wl b/fuzz_input/087.wl
new file mode 100644
index 0000000..3f58885
--- /dev/null
+++ b/fuzz_input/087.wl
@@ -0,0 +1,5 @@
+if 1 < 2:
+ 1
+else
+ 2
+3
\ No newline at end of file
diff --git a/fuzz_input/088.wl b/fuzz_input/088.wl
new file mode 100644
index 0000000..bd13a83
--- /dev/null
+++ b/fuzz_input/088.wl
@@ -0,0 +1,5 @@
+if 1 > 2:
+ 1
+else
+ 2
+3
\ No newline at end of file
diff --git a/fuzz_input/089.wl b/fuzz_input/089.wl
new file mode 100644
index 0000000..c93c3b5
--- /dev/null
+++ b/fuzz_input/089.wl
@@ -0,0 +1,5 @@
+let i = 0
+while i < 3: {
+ true
+ i = i + 1
+}
diff --git a/fuzz_input/090.wl b/fuzz_input/090.wl
new file mode 100644
index 0000000..c9ef705
--- /dev/null
+++ b/fuzz_input/090.wl
@@ -0,0 +1,2 @@
+for a in ['A', 'B', 'C']:
+ a
\ No newline at end of file
diff --git a/fuzz_input/091.wl b/fuzz_input/091.wl
new file mode 100644
index 0000000..d5b3eb8
--- /dev/null
+++ b/fuzz_input/091.wl
@@ -0,0 +1,4 @@
+for a, b in ['A', 'B', 'C']: {
+ a
+ b
+}
\ No newline at end of file
diff --git a/fuzz_input/092.wl b/fuzz_input/092.wl
new file mode 100644
index 0000000..579478d
--- /dev/null
+++ b/fuzz_input/092.wl
@@ -0,0 +1,2 @@
+for a in {x:1,y:2,z:3}:
+ a
\ No newline at end of file
diff --git a/fuzz_input/093.wl b/fuzz_input/093.wl
new file mode 100644
index 0000000..d48e84c
--- /dev/null
+++ b/fuzz_input/093.wl
@@ -0,0 +1,4 @@
+for a, b in {x:1,y:2,z:3}: {
+ a
+ b
+}
\ No newline at end of file
diff --git a/fuzz_input/094.wl b/fuzz_input/094.wl
new file mode 100644
index 0000000..78967e0
--- /dev/null
+++ b/fuzz_input/094.wl
@@ -0,0 +1,2 @@
+procedure P()
+ 0
\ No newline at end of file
diff --git a/fuzz_input/095.wl b/fuzz_input/095.wl
new file mode 100644
index 0000000..c283a17
--- /dev/null
+++ b/fuzz_input/095.wl
@@ -0,0 +1,2 @@
+procedure P(a)
+ a
\ No newline at end of file
diff --git a/fuzz_input/096.wl b/fuzz_input/096.wl
new file mode 100644
index 0000000..54be93c
--- /dev/null
+++ b/fuzz_input/096.wl
@@ -0,0 +1,5 @@
+procedure P(a, b, c) {
+ a
+ b
+ c
+}
\ No newline at end of file
diff --git a/fuzz_input/097.wl b/fuzz_input/097.wl
new file mode 100644
index 0000000..cf8e175
--- /dev/null
+++ b/fuzz_input/097.wl
@@ -0,0 +1,3 @@
+procedure P()
+ 0
+P()
\ No newline at end of file
diff --git a/fuzz_input/098.wl b/fuzz_input/098.wl
new file mode 100644
index 0000000..41a15f2
--- /dev/null
+++ b/fuzz_input/098.wl
@@ -0,0 +1,6 @@
+procedure P(a, b, c) {
+ a
+ b
+ c
+}
+P()
\ No newline at end of file
diff --git a/fuzz_input/099.wl b/fuzz_input/099.wl
new file mode 100644
index 0000000..f649856
--- /dev/null
+++ b/fuzz_input/099.wl
@@ -0,0 +1,6 @@
+procedure P(a, b, c) {
+ a
+ b
+ c
+}
+P(1)
\ No newline at end of file
diff --git a/fuzz_input/100.wl b/fuzz_input/100.wl
new file mode 100644
index 0000000..19d70c6
--- /dev/null
+++ b/fuzz_input/100.wl
@@ -0,0 +1,6 @@
+procedure P(a, b, c) {
+ a
+ b
+ c
+}
+P(1, 2)
\ No newline at end of file
diff --git a/fuzz_input/101.wl b/fuzz_input/101.wl
new file mode 100644
index 0000000..4dfdb07
--- /dev/null
+++ b/fuzz_input/101.wl
@@ -0,0 +1,6 @@
+procedure P(a, b, c) {
+ a
+ b
+ c
+}
+P(1, 2, 3)
\ No newline at end of file
diff --git a/fuzz_input/102.wl b/fuzz_input/102.wl
new file mode 100644
index 0000000..ae0d05d
--- /dev/null
+++ b/fuzz_input/102.wl
@@ -0,0 +1,2 @@
+procedure N(n) n
+N(1) + N(2)
\ No newline at end of file
diff --git a/fuzz_input/103.wl b/fuzz_input/103.wl
new file mode 100644
index 0000000..f867650
--- /dev/null
+++ b/fuzz_input/103.wl
@@ -0,0 +1,2 @@
+P()
+procedure P() 1
\ No newline at end of file
diff --git a/fuzz_input/104.wl b/fuzz_input/104.wl
new file mode 100644
index 0000000..918d1b6
--- /dev/null
+++ b/fuzz_input/104.wl
@@ -0,0 +1,5 @@
+P()
+procedure P() 1
+{
+ procedure P() 2
+}
\ No newline at end of file
diff --git a/fuzz_input/105.wl b/fuzz_input/105.wl
new file mode 100644
index 0000000..c15edaf
--- /dev/null
+++ b/fuzz_input/105.wl
@@ -0,0 +1,5 @@
+procedure P() 1
+P()
+{
+ procedure P() 2
+}
\ No newline at end of file
diff --git a/fuzz_input/106.wl b/fuzz_input/106.wl
new file mode 100644
index 0000000..9b87b03
--- /dev/null
+++ b/fuzz_input/106.wl
@@ -0,0 +1,5 @@
+procedure P() 1
+{
+ P()
+ procedure P() 2
+}
\ No newline at end of file
diff --git a/fuzz_input/107.wl b/fuzz_input/107.wl
new file mode 100644
index 0000000..254082e
--- /dev/null
+++ b/fuzz_input/107.wl
@@ -0,0 +1,5 @@
+procedure P() 1
+{
+ procedure P() 2
+ P()
+}
\ No newline at end of file
diff --git a/fuzz_input/108.wl b/fuzz_input/108.wl
new file mode 100644
index 0000000..852b4dc
--- /dev/null
+++ b/fuzz_input/108.wl
@@ -0,0 +1,5 @@
+procedure P() 1
+{
+ procedure P() 2
+}
+P()
\ No newline at end of file
diff --git a/fuzz_input/109.wl b/fuzz_input/109.wl
new file mode 100644
index 0000000..985ba55
--- /dev/null
+++ b/fuzz_input/109.wl
@@ -0,0 +1 @@
+Hello, world!
\ No newline at end of file
diff --git a/fuzz_input/110.wl b/fuzz_input/110.wl
new file mode 100644
index 0000000..5d4ce0e
--- /dev/null
+++ b/fuzz_input/110.wl
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/fuzz_input/111.wl b/fuzz_input/111.wl
new file mode 100644
index 0000000..6de6fc5
--- /dev/null
+++ b/fuzz_input/111.wl
@@ -0,0 +1 @@
+let a =
\ No newline at end of file
diff --git a/fuzz_input/112.wl b/fuzz_input/112.wl
new file mode 100644
index 0000000..0b722f3
--- /dev/null
+++ b/fuzz_input/112.wl
@@ -0,0 +1,2 @@
+let a =
+a
\ No newline at end of file