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:
Vendored
+18
@@ -0,0 +1,18 @@
|
||||
// retoor <retoor@molodetz.nl>
|
||||
|
||||
import "pathlib" for Path
|
||||
|
||||
var dir = Path.new("/tmp/wren_pathlib_test_copy")
|
||||
if (dir.exists()) dir.rmtree()
|
||||
dir.mkdir()
|
||||
|
||||
var src = dir / "original.txt"
|
||||
src.writeText("copy me")
|
||||
|
||||
var dst = dir / "copied.txt"
|
||||
src.copyfile(dst)
|
||||
|
||||
System.print(dst.exists()) // expect: true
|
||||
System.print(dst.readText()) // expect: copy me
|
||||
|
||||
dir.rmtree()
|
||||
Vendored
+12
@@ -0,0 +1,12 @@
|
||||
// retoor <retoor@molodetz.nl>
|
||||
|
||||
import "pathlib" for Path
|
||||
|
||||
var cwd = Path.cwd
|
||||
System.print(cwd.isAbsolute) // expect: true
|
||||
System.print(cwd.exists()) // expect: true
|
||||
System.print(cwd.isDir()) // expect: true
|
||||
|
||||
var home = Path.home
|
||||
System.print(home.isAbsolute) // expect: true
|
||||
System.print(home.exists()) // expect: true
|
||||
Vendored
+11
@@ -0,0 +1,11 @@
|
||||
// retoor <retoor@molodetz.nl>
|
||||
|
||||
import "pathlib" for Path
|
||||
|
||||
var p1 = Path.new("/home/user")
|
||||
var p2 = Path.new("/home/user")
|
||||
var p3 = Path.new("/home/other")
|
||||
|
||||
System.print(p1 == p2) // expect: true
|
||||
System.print(p1 != p3) // expect: true
|
||||
System.print(p1 == p3) // expect: false
|
||||
Vendored
+13
@@ -0,0 +1,13 @@
|
||||
// retoor <retoor@molodetz.nl>
|
||||
|
||||
import "pathlib" for Path
|
||||
|
||||
var p1 = Path.new("/tmp")
|
||||
System.print(p1.exists()) // expect: true
|
||||
System.print(p1.isDir()) // expect: true
|
||||
System.print(p1.isFile()) // expect: false
|
||||
|
||||
var p2 = Path.new("/nonexistent_path_xyz_12345")
|
||||
System.print(p2.exists()) // expect: false
|
||||
System.print(p2.isDir()) // expect: false
|
||||
System.print(p2.isFile()) // expect: false
|
||||
Vendored
+14
@@ -0,0 +1,14 @@
|
||||
// retoor <retoor@molodetz.nl>
|
||||
|
||||
import "pathlib" for Path
|
||||
|
||||
var home = Path.home
|
||||
var expanded = Path.new("~").expanduser()
|
||||
System.print(expanded == home) // expect: true
|
||||
|
||||
var subpath = Path.new("~/docs").expanduser()
|
||||
var expected = home / "docs"
|
||||
System.print(subpath == expected) // expect: true
|
||||
|
||||
var regular = Path.new("/usr/local").expanduser()
|
||||
System.print(regular) // expect: /usr/local
|
||||
Vendored
+22
@@ -0,0 +1,22 @@
|
||||
// retoor <retoor@molodetz.nl>
|
||||
|
||||
import "pathlib" for Path
|
||||
|
||||
var base = Path.new("/tmp/wren_pathlib_test_glob")
|
||||
if (base.exists()) base.rmtree()
|
||||
base.mkdir(true)
|
||||
|
||||
(base / "a.txt").writeText("a")
|
||||
(base / "b.txt").writeText("b")
|
||||
(base / "c.md").writeText("c")
|
||||
var sub = base / "sub"
|
||||
sub.mkdir()
|
||||
(sub / "d.txt").writeText("d")
|
||||
|
||||
var txtFiles = base.glob("*.txt")
|
||||
System.print(txtFiles.count) // expect: 2
|
||||
|
||||
var allTxt = base.rglob("*.txt")
|
||||
System.print(allTxt.count) // expect: 3
|
||||
|
||||
base.rmtree()
|
||||
Vendored
+24
@@ -0,0 +1,24 @@
|
||||
// retoor <retoor@molodetz.nl>
|
||||
|
||||
import "pathlib" for Path
|
||||
|
||||
var dir = Path.new("/tmp/wren_pathlib_test_iterdir")
|
||||
if (dir.exists()) dir.rmtree()
|
||||
dir.mkdir()
|
||||
|
||||
(dir / "a.txt").writeText("a")
|
||||
(dir / "b.txt").writeText("b")
|
||||
(dir / "sub").mkdir()
|
||||
|
||||
var entries = dir.iterdir()
|
||||
System.print(entries.count) // expect: 3
|
||||
|
||||
var names = {}
|
||||
for (e in entries) {
|
||||
names[e.name] = true
|
||||
}
|
||||
System.print(names.containsKey("a.txt")) // expect: true
|
||||
System.print(names.containsKey("b.txt")) // expect: true
|
||||
System.print(names.containsKey("sub")) // expect: true
|
||||
|
||||
dir.rmtree()
|
||||
Vendored
+19
@@ -0,0 +1,19 @@
|
||||
// retoor <retoor@molodetz.nl>
|
||||
|
||||
import "pathlib" for Path
|
||||
|
||||
var p1 = Path.new("/home")
|
||||
var p2 = p1.joinpath("user")
|
||||
System.print(p2) // expect: /home/user
|
||||
|
||||
var p3 = p1 / "user" / "docs"
|
||||
System.print(p3) // expect: /home/user/docs
|
||||
|
||||
var p4 = p1.joinpath("/absolute")
|
||||
System.print(p4) // expect: /absolute
|
||||
|
||||
var p5 = Path.new("").joinpath("file.txt")
|
||||
System.print(p5) // expect: file.txt
|
||||
|
||||
var p6 = Path.new("/home/").joinpath("user")
|
||||
System.print(p6) // expect: /home/user
|
||||
Vendored
+10
@@ -0,0 +1,10 @@
|
||||
// retoor <retoor@molodetz.nl>
|
||||
|
||||
import "pathlib" for Path
|
||||
|
||||
var p1 = Path.new("/home/user/file.txt")
|
||||
System.print(p1.match("*.txt")) // expect: true
|
||||
System.print(p1.match("*.py")) // expect: false
|
||||
System.print(p1.match("file.*")) // expect: true
|
||||
System.print(p1.match("f???.*")) // expect: true
|
||||
System.print(p1.match("*")) // expect: true
|
||||
Vendored
+14
@@ -0,0 +1,14 @@
|
||||
// retoor <retoor@molodetz.nl>
|
||||
|
||||
import "pathlib" for Path
|
||||
|
||||
var base = Path.new("/tmp/wren_pathlib_test_mkdir")
|
||||
if (base.exists()) base.rmtree()
|
||||
|
||||
var nested = base / "a" / "b" / "c"
|
||||
nested.mkdir(true)
|
||||
System.print(nested.exists()) // expect: true
|
||||
System.print(nested.isDir()) // expect: true
|
||||
|
||||
base.rmtree()
|
||||
System.print(base.exists()) // expect: false
|
||||
Vendored
+17
@@ -0,0 +1,17 @@
|
||||
// retoor <retoor@molodetz.nl>
|
||||
|
||||
import "pathlib" for Path
|
||||
|
||||
var dir = Path.new("/tmp/wren_pathlib_test_rw")
|
||||
if (!dir.exists()) dir.mkdir()
|
||||
|
||||
var f = dir / "test.txt"
|
||||
f.writeText("hello pathlib")
|
||||
System.print(f.readText()) // expect: hello pathlib
|
||||
System.print(f.exists()) // expect: true
|
||||
System.print(f.isFile()) // expect: true
|
||||
|
||||
f.unlink()
|
||||
System.print(f.exists()) // expect: false
|
||||
|
||||
dir.rmdir()
|
||||
Vendored
+10
@@ -0,0 +1,10 @@
|
||||
// retoor <retoor@molodetz.nl>
|
||||
|
||||
import "pathlib" for Path
|
||||
|
||||
var p1 = Path.new("/home/user/docs/file.txt")
|
||||
System.print(p1.relativeTo("/home/user")) // expect: docs/file.txt
|
||||
System.print(p1.relativeTo("/home")) // expect: user/docs/file.txt
|
||||
|
||||
var p2 = Path.new("/home/user")
|
||||
System.print(p2.relativeTo("/home/user")) // expect: .
|
||||
Vendored
+19
@@ -0,0 +1,19 @@
|
||||
// retoor <retoor@molodetz.nl>
|
||||
|
||||
import "pathlib" for Path
|
||||
|
||||
var dir = Path.new("/tmp/wren_pathlib_test_rename")
|
||||
if (dir.exists()) dir.rmtree()
|
||||
dir.mkdir()
|
||||
|
||||
var src = dir / "source.txt"
|
||||
src.writeText("content")
|
||||
System.print(src.exists()) // expect: true
|
||||
|
||||
var dst = dir / "dest.txt"
|
||||
src.rename(dst)
|
||||
System.print(src.exists()) // expect: false
|
||||
System.print(dst.exists()) // expect: true
|
||||
System.print(dst.readText()) // expect: content
|
||||
|
||||
dir.rmtree()
|
||||
Vendored
+28
@@ -0,0 +1,28 @@
|
||||
// retoor <retoor@molodetz.nl>
|
||||
|
||||
import "pathlib" for Path
|
||||
|
||||
var base = Path.new("/tmp/wren_pathlib_test_walk")
|
||||
if (base.exists()) base.rmtree()
|
||||
base.mkdir()
|
||||
|
||||
(base / "file1.txt").writeText("a")
|
||||
var sub = base / "subdir"
|
||||
sub.mkdir()
|
||||
(sub / "file2.txt").writeText("b")
|
||||
|
||||
var entries = base.walk()
|
||||
System.print(entries.count) // expect: 2
|
||||
|
||||
var root1 = entries[0][0]
|
||||
var dirs1 = entries[0][1]
|
||||
var files1 = entries[0][2]
|
||||
System.print(dirs1) // expect: [subdir]
|
||||
System.print(files1) // expect: [file1.txt]
|
||||
|
||||
var dirs2 = entries[1][1]
|
||||
var files2 = entries[1][2]
|
||||
System.print(dirs2) // expect: []
|
||||
System.print(files2) // expect: [file2.txt]
|
||||
|
||||
base.rmtree()
|
||||
Vendored
+17
@@ -0,0 +1,17 @@
|
||||
// retoor <retoor@molodetz.nl>
|
||||
|
||||
import "pathlib" for Path
|
||||
|
||||
var p1 = Path.new("/home/user/file.txt")
|
||||
|
||||
var p2 = p1.withName("other.md")
|
||||
System.print(p2) // expect: /home/user/other.md
|
||||
|
||||
var p3 = p1.withStem("archive")
|
||||
System.print(p3) // expect: /home/user/archive.txt
|
||||
|
||||
var p4 = p1.withSuffix(".bak")
|
||||
System.print(p4) // expect: /home/user/file.bak
|
||||
|
||||
var p5 = Path.new("/data/file.tar.gz").withSuffix(".zip")
|
||||
System.print(p5) // expect: /data/file.tar.zip
|
||||
Reference in New Issue
Block a user