pyvm: split op handlers into ops_core/ops_box/ops_ctrl; add ops_flow + intrinsic; delegate vm.py without behavior change

net-plugin: modularize constants (consts.rs) and sockets (sockets.rs); remove legacy commented socket code; fix unused imports
mir: move instruction unit tests to tests/mir_instruction_unit.rs (file lean-up); no semantic changes
runner/pyvm: ensure using pre-strip; misc docs updates

Build: cargo build ok; legacy cfg warnings remain as before
This commit is contained in:
Selfhosting Dev
2025-09-21 08:53:00 +09:00
parent ee17cfd979
commit c8063c9e41
247 changed files with 10187 additions and 23124 deletions

View File

@ -0,0 +1,12 @@
function f(x) {
return x
}
function main(args) {
local i = 0
loop(i < 2) {
f(i) catch(e) { print(e) } cleanup { print("cleanup") }
i = i + 1
}
}

View File

@ -0,0 +1,16 @@
function f(x) {
return x
}
function main(args) {
local i = 0
local a = 0
loop(i < 2) {
// both branches assign to the same variable -> JoinResult(a)
if i % 2 == 0 { a = 1 } else { a = 2 }
// include postfix sugar to exercise TryCatch normalization in the same scope
with_cleanup(postfix_catch(f(i), "Error", fn(e){ print(e) }), fn(){ })
i = i + 1
}
}

View File

@ -0,0 +1,15 @@
function f(x) {
return x
}
function main(args) {
local i = 0
loop(i < 2) {
with_cleanup(
postfix_catch(f(i), "Error", fn(e){ print(e) }),
fn(){ print("cleanup") }
)
i = i + 1
}
}

View File

@ -0,0 +1,9 @@
// Phase 1 sugar: postfix_catch(expr, "Error", fn(e){ body })
function do_work(args) {
return 0
}
function main(args) {
postfix_catch(do_work(args), "Error", fn(e){ print(e) })
}

View File

@ -0,0 +1,12 @@
// Phase 1 sugar: method call wrapped by postfix_catch
box Worker {
run() {
return 0
}
}
function main(args) {
local w = new Worker()
postfix_catch(w.run(), "Error", fn(e){ print(e) })
}

View File

@ -0,0 +1,9 @@
// Phase 1 sugar: with_cleanup(expr, fn(){ body })
function cleanup_target(args) {
return 1
}
function main(args) {
with_cleanup(cleanup_target(args), fn(){ print("done") })
}

View File

@ -0,0 +1,5 @@
function main(args) {
local a = 0
if 1 { a = 1 } else { a = 2 }
}

View File

@ -0,0 +1,17 @@
function main(args) {
local a, b, c
local d = 1
if d == 1 {
a = 1
b = 2
c = 3
} else {
a = 10
b = 20
c = 30
}
print(a)
print(b)
print(c)
}

View File

@ -0,0 +1,15 @@
function main(args) {
local x, y
local c = 1
if c == 1 {
x = 10
y = 20
} else {
x = 30
y = 40
}
// ensure use
print(x)
print(y)
}

View File

@ -0,0 +1,8 @@
function main(args) {
local x = 0
if 1 {
x = 42
print(x)
}
}

View File

@ -0,0 +1,11 @@
function main(args) {
local x
local c = 0
if c == 1 {
x = 10
} else {
x = 20
}
print(x)
}

View File

@ -0,0 +1,4 @@
for(fn(){ local i = 0 }, i <= 4, fn(){ i = i + 2 }, fn(){
print(i)
})

View File

@ -0,0 +1,5 @@
local arr = []
foreach(arr, "x", fn() {
print(x)
})

View File

@ -0,0 +1,9 @@
// Nested bare block containing break; should terminate loop when i==3
local i = 0
loop (i < 10) {
{ if i == 3 { break } }
print(i)
i = i + 1
}
return 0

View File

@ -0,0 +1,11 @@
local i = 0
loop(1) {
if (i < 10) {
if (i == 3) {
break
}
}
print(i)
i = i + 1
}

View File

@ -0,0 +1,14 @@
local i = 0
loop(i < 6) {
if (i % 2 == 0) {
if (i == 4) {
i = i + 1
continue
}
i = i + 1
continue
}
print(i)
i = i + 1
}

View File

@ -0,0 +1,2 @@
print("hello")

View File

@ -0,0 +1,4 @@
local s = "hello world"
local i = s.indexOf("world")
print(i)