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
+60
View File
@@ -0,0 +1,60 @@
// retoor <retoor@molodetz.nl>
import "tempfile" for TempFile, NamedTemporaryFile, TemporaryDirectory
import "pathlib" for Path
System.print("=== TempFile Module Demo ===\n")
System.print("--- Utility Functions ---")
System.print("Temp directory: %(TempFile.gettempdir())")
System.print("Temp prefix: %(TempFile.gettempprefix())")
System.print("\n--- mktemp (name only, no file created) ---")
var name = TempFile.mktemp(".txt", "demo_")
System.print("Generated name: %(name)")
System.print("File exists: %(Path.new(name).exists())")
System.print("\n--- mkstemp (creates file atomically) ---")
var path = TempFile.mkstemp(".dat", "demo_")
System.print("Created file: %(path)")
System.print("File exists: %(Path.new(path).exists())")
Path.new(path).unlink()
System.print("\n--- mkdtemp (creates directory) ---")
var dir = TempFile.mkdtemp("_work", "demo_")
System.print("Created directory: %(dir)")
System.print("Is directory: %(Path.new(dir).isDir())")
Path.new(dir).rmdir()
System.print("\n--- NamedTemporaryFile ---")
var tmp = NamedTemporaryFile.new(".txt", "demo_")
System.print("Temp file: %(tmp.name)")
tmp.write("Hello from tempfile module!")
System.print("Content: %(tmp.read())")
System.print("Auto-delete: %(tmp.delete)")
tmp.close()
System.print("Deleted after close: %(!(Path.new(tmp.name).exists()))")
System.print("\n--- NamedTemporaryFile.use (context manager) ---")
NamedTemporaryFile.new(".log").use {|f|
f.write("Log entry: operation completed")
System.print("Inside use block: %(f.read())")
}
System.print("Automatically cleaned up after use block")
System.print("\n--- TemporaryDirectory ---")
var tmpDir = TemporaryDirectory.new("_session", "demo_")
System.print("Temp dir: %(tmpDir.name)")
System.print("Is directory: %(tmpDir.path.isDir())")
tmpDir.cleanup()
System.print("Deleted after cleanup: %(!(Path.new(tmpDir.name).exists()))")
System.print("\n--- TemporaryDirectory.use (context manager) ---")
TemporaryDirectory.new().use {|d|
System.print("Working in: %(d.name)")
Path.new(d.name + "/data.txt").writeText("temporary data")
System.print("Created file inside temp dir")
}
System.print("Automatically cleaned up with all contents")
System.print("\n=== Done ===")