Commit Graph

223 Commits

Author SHA1 Message Date
Kayne Ruse
b0d9c15d33 Added a benchmark for JS 2026-04-12 08:55:15 +10:00
Kayne Ruse
24e5d8081c Tweaked a doc 2026-04-12 08:42:06 +10:00
Kayne Ruse
42aef306a9 Added a lua benchmark for performance comparisons 2026-04-12 08:40:28 +10:00
Kayne Ruse
6f27d07829 Added a few opcodes to the inspector 2026-04-12 00:19:20 +10:00
Kayne Ruse
b32ea9f309 Started working on a decompiler, called 'bytecode inspector'
It only has a few instructions for now, but I can flesh it out over
time.
2026-04-11 13:37:26 +10:00
Kayne Ruse
49a825aaf9 Removed some old notes 2026-04-11 02:06:59 +10:00
Kayne Ruse
baa81b1aa9 Removed annoying workingdir thing 2026-04-11 01:55:11 +10:00
Kayne Ruse
9553edef9c Added tools for vscode 2026-04-11 01:48:30 +10:00
Kayne Ruse
66155fa213 Tweak, but I need a decompiler now 2026-04-10 16:19:03 +10:00
Kayne Ruse
547229e150 Script tests re-added, all tests can run under gdb
Also fixed a minor bug with printing, and removed the ability to
configure the parser.

Added and updated QUICKSTART.md as a quick way to get people started.

There's some broken scripts under 'scripts/' that require functions to
work properly.
2026-04-10 15:28:56 +10:00
Kayne Ruse
211744535e Tweak 2026-04-10 12:15:02 +10:00
Kayne Ruse
3a24fbf6e1 Tweaked CI 2026-04-07 22:00:54 +10:00
Kayne Ruse
842f041a50 VM test is passing 2026-04-07 21:34:05 +10:00
Kayne Ruse
7408a24a12 Scope test is working 2026-04-07 20:48:32 +10:00
Kayne Ruse
09fc6d5279 Compiler test is passing 2026-04-07 20:36:58 +10:00
Kayne Ruse
f25e81cd09 Parser test is passing 2026-04-07 20:14:27 +10:00
Kayne Ruse
48072f0dd1 AST test is passing 2026-04-07 20:06:44 +10:00
Kayne Ruse
522fc3e64b Value test is passing 2026-04-07 19:44:28 +10:00
Kayne Ruse
f4ce6ad9f1 String test is passing
Note: String fragmentation is no longer supported
2026-04-07 19:22:31 +10:00
Kayne Ruse
3f35502694 Updatedd license 2026-04-07 12:30:25 +10:00
Kayne Ruse
f06218b9cd 'print' now works as expected
String literals are now stored in the bucket mid-compilation, but this
is fine, as the buckets are freed one the bytecode is complete.
2026-04-06 23:08:17 +10:00
Kayne Ruse
1ae3fcbf73 WIP: Scopes weren't tracking their content sizes
'print' no longer segfaults from a long chain of indirect memory frees.

It still doesn't work though, which is odd.
2026-04-06 21:50:41 +10:00
Kayne Ruse
abae97b6e5 Fixed workflow 2026-04-05 18:48:27 +10:00
Kayne Ruse
fbb7e1bc54 WIP: Retreived the unit tests (formerly test cases)
Some of these still work, others have just been dummied out for now.

Also added tests for console colors tool, and tweaked it to work
properly.
2026-04-05 18:42:56 +10:00
Kayne Ruse
57fe9bb00d WIP: Compiles but still very broken 2026-04-05 17:04:30 +10:00
Kayne Ruse
914ee6fcfa WIP: Fixed strings and scopes, still reworking impacted areas 2026-04-05 10:13:58 +10:00
Kayne Ruse
ba9418f365 Removed unneeded files and console colors are disabled 2026-04-04 20:35:12 +11:00
Kayne Ruse
98208f4bb5 Began cleaning up this project for a soft reboot 2026-04-04 19:32:45 +11:00
Kayne Ruse
5a0012d73a Tweaked README
...because I'm still not feeling like coding, thanks to this damn flu.
2025-03-01 12:30:53 +11:00
Kayne Ruse
24d111e52d Updated links after moving the repo 2025-02-28 20:12:00 +11:00
Kayne Ruse
4b21e61df0 Updated README 2025-02-28 11:30:01 +11:00
Kayne Ruse
d3b59eb0da WIP functions working, untested, memory issues, read more
I've ripped out the deep copying, and flattened the bucket usage, but
this results in no memory being freed or reused for the lifetime of the
program.

This is shown most clearly with this script:

```toy
fn makeCounter() {
	var counter: int = 0;

	fn increment() {
		return ++counter;
	}

	return increment;
}

var tally = makeCounter();

while (true) {
	var result = tally();

	if (result >= 10_000_000) {
		break;
	}
}
```

The number of calls vs amount of memory consumed is:

```
function calls -> memory used in megabytes
1_000 -> 0.138128
10_000 -> 2.235536
100_000 -> 21.7021
1_000_000 -> 216.1712
10_000_000 -> 1520.823
```

Obviously this needs to be fixed, as ballooning to gigabytes of memory
in only a moment isn't practical. That will be the next task - to find
some way to free memory that isn't needed anymore.

See #163, #160
2025-02-21 11:41:27 +11:00
Kayne Ruse
9fe6d6b218 WIP bad approach, read more
I build a self-referential system, then tried to copy only parts. I need
to step back and adjust my approach.

'Toy_private_deepCopyValue' and 'Toy_private_deepCopyScope' need to be
ripped out, and I need to simply accept there will be only one instance
of 'Toy_Bucket' that isn't freed until the top-level VM is.

I need an hour's break before I'll tackle this again.

See #163
2025-02-18 13:06:15 +11:00
Kayne Ruse
3a82593e4d Adjusted timetable 2025-02-18 08:34:29 +11:00
Kayne Ruse
639250f028 WIP return keyword, read more
Functions are having issues with being copied around, especially
between buckets, leading to the scopes getting looped. The program gets
stuck in 'incrementRefCount()'.

It's past my time limit, so I'll keep working on it tomorrow with a
fresh mind.

All function stuff is still untested.

See #163
2025-02-17 19:10:24 +11:00
Kayne Ruse
02dfc996b4 Functions are successfully called, read more
Return keyword is not yet implemented.

Functions are untested.

See #163
2025-02-17 14:05:07 +11:00
Kayne Ruse
76d89fe0ad Reduced excessive calls to Toy_unwrapValue()
In practice, references only point to arrays or tables.

Fixed #176
2025-02-17 04:42:22 +11:00
Kayne Ruse
15aea7c032 Tweaked Timetable, read more
I'm only a couple hours short of my goal, but I'm taking the weekend off
to relax, and this'll be ready next week.
2025-02-13 18:28:20 +11:00
Kayne Ruse
574502bf3e Removed old contribs file 2025-02-11 14:28:20 +11:00
Kayne Ruse
258968d7a4 WIP, Functions are declared, still not called 2025-02-11 11:55:35 +11:00
Kayne Ruse
7a8c415b3f Functions are written, but not yet executed, untested 2025-02-10 20:17:53 +11:00
Kayne Ruse
344c265918 Parameters are immutable
It took me a whole day to change one line.
2025-02-09 14:34:44 +11:00
Kayne Ruse
f2660b95eb Credited @NishiOwO for NetBSD support 2025-02-09 00:40:21 +11:00
Kayne Ruse
fe64e876bd Merge pull request #175 from NishiOwO/v2
Compile on NetBSD
2025-02-09 00:32:00 +11:00
NishiOwO
1006b6e216 Add bitness definitions, and platform definitions 2025-02-08 22:14:32 +09:00
NishiOwO
a1cfc095a7 Compile on NetBSD 2025-02-08 22:09:28 +09:00
Kayne Ruse
7c054db9e6 Compiler now reuses existing strings in the data, read more
If a string exists in the data, instead of being written, the function
'emitCStringToData()' will instead return the address of the match
within the data section.

Then, I can search the jump table for that address, and use the existing
jump entry or append a new one.

Fixes #168
2025-02-08 17:27:47 +11:00
Kayne Ruse
72f4e4c143 Tweaked workflow to fix GH's new runners 2025-02-08 12:16:42 +11:00
Kayne Ruse
e2a284d9ce Ensured parser is reading functions correctly, read more
Parameter lists are read manually, rather than delegating to
parsePrecedence, because that was causing issues.

function bodies are read as block-level statements, just like the entire
files.
2025-02-08 12:00:55 +11:00
Kayne Ruse
c646904407 replaced void* with unsigned char* everywhere 2025-02-08 00:53:23 +11:00