feat: add async/await keywords, Num/String extensions, and Jinja markdown example

Add `async` and `await` token support to the Wren compiler with scheduler resolution logic, extend `Num` with `e` constant, hyperbolic trig, base conversion, and new methods (`isZero`, `gcd`, `lcm`, `digits`, etc.), extend `String` with `lower`, `upper`, `capitalize`, `title`, and regenerate `wren_core.wren.inc`. Include `Makefile` for multi-platform builds, rewrite `README.md` with updated build instructions, and add `example/await_demo.wren` and `example/jinja_markdown.wren` demonstrating new features.
This commit is contained in:
2026-01-25 03:58:39 +00:00
parent 74ef5cbc11
commit 46fc2e2470
139 changed files with 5078 additions and 73 deletions
+8
View File
@@ -0,0 +1,8 @@
import "scheduler" for Scheduler, Future
import "timer" for Timer
var task = async { "ready" }
await Timer.sleep(10)
System.print(task.isDone) // expect: true
System.print(await task) // expect: ready
+7
View File
@@ -0,0 +1,7 @@
import "scheduler" for Scheduler, Future
import "timer" for Timer
var task = async { 42 }
var result = await task
System.print(result) // expect: 42
+18
View File
@@ -0,0 +1,18 @@
import "scheduler" for Scheduler, Future
import "timer" for Timer
var order = []
var task1 = async {
await Timer.sleep(2)
order.add("task1")
}
var task2 = async {
await Timer.sleep(1)
order.add("task2")
}
await task1
await task2
System.print(order) // expect: [task2, task1]
+5
View File
@@ -0,0 +1,5 @@
import "scheduler" for Scheduler
import "timer" for Timer
await Timer.sleep(1)
System.print("done") // expect: done
+11
View File
@@ -0,0 +1,11 @@
import "scheduler" for Scheduler
import "timer" for Timer
class Helper {
static run() {
await Timer.sleep(1)
return "completed"
}
}
System.print(Helper.run()) // expect: completed
+6
View File
@@ -0,0 +1,6 @@
import "scheduler" for Scheduler
import "timer" for Timer
var result = await Timer.sleep(1)
System.print(result == null) // expect: true
System.print("done") // expect: done