diff options
| author | 2026-10-12 08:46:23 +0330 | |
|---|---|---|
| committer | 2026-10-12 08:46:23 +0330 | |
| commit | ecc350ca5c2eb50be8309c5f14f8bf0d87db9a02 (patch) | |
| tree | 70e0af76a1b13affff7c6cc8aac7b3e6ef960478 /examples/selfpatch.zc | |
a
Diffstat (limited to 'examples/selfpatch.zc')
| -rw-r--r-- | examples/selfpatch.zc | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/examples/selfpatch.zc b/examples/selfpatch.zc new file mode 100644 index 0000000..e3f821d --- /dev/null +++ b/examples/selfpatch.zc @@ -0,0 +1,16 @@ +// code is data: find the literal 'A' inside f's compiled words and rewrite it. +// on the jit the store lands on translated code, which gets dropped and +// retranslated on the next call. +fn f() { put_c('A'); return 0; } +fn litw(v) { return v + v + 1; } // how the vm encodes a literal push +fn main() { + let p = f; + f(); + while (*p != litw('A')) p++; + *p = litw('B'); + f(); + *p = litw('C'); + f(); + put_c(10); + return 0; +} |
