tickets
All repositories: gitoria
2.5 KB
// process.hl → class Process — one child, its lifetime, its events. The// eventloop wiring lives HERE so app code never sees it: the events source is// registered AT this instance, the internal fan-out re-emits `line` and// `exit` at itself, and `on process.line` / `on process.exit` in the app are// ordinary instance-scoped handlers.Number pid = 0Boolean running = falseNumber #srcId = 0start(String cmd, options) {// THE STRING GOES OVER WHOLE (mission 249). `hl_proc_spawn` branches on// the argument's type and its string branch is the tokenizer server.hl// documents: whitespace RUNS (spaces, tabs, newlines — a command written// across lines is one command) and quote GROUPING. Splitting here on " "// and handing the pieces to the LIST branch is what kept that code// unreached, and put a tab or a newline inside argv[0].return this.launch(cmd, options)}startArgs(args, options) {return this.launch(args, options)}// The one spawn: `spec` is the command STRING or the argv LIST, and which// one it is decides the branch inside `hl_proc_spawn`, never anything here.launch(spec, options) {let spawned = __native("proc.spawn", spec, options)pid = spawned.pidrunning = true#srcId = __native("eventloop.register", spawned.events, "__procEvent")return this}on __procEvent(ev) {if (ev.exit != null) {running = false// A FINISHED CHILD RETIRES ITS SOURCE (server.hl: "a program whose// children are done simply ends"). Without this the loop still holds// a source that will never speak again and the program never returns.__native("eventloop.unregister", #srcId)emit exit(ev)return null}// a `binary = true` child (ticket #42): the raw bytes as a Bytes, never// split into linesif (ev.chunk != null) {emit data({ data = toBytes(ev.chunk), stream = ev.stream })return null}emit line(ev)return null}\* WRITE TO THE CHILD'S STDIN (ruling on ticket #42): a String's bytes, or aBytes, exactly as they are — nothing added, no newline. Answers how manybytes went. Only for a child spawned with `{ stdin = 'pipe' }` (a child'sstdin is inherited otherwise). The child reads EOF after end(), or when itexits; a write after that is an Error. *\write(data) {if (hlTypeName(data) == 'Bytes') {return __native("proc.write_hex", pid, data.hex())}return __native("proc.write", pid, data)}\* Close the child's stdin: it reads EOF. *\end() {return __native("proc.end", pid)}kill() {if (running == false) {return false}return __native("proc.kill", pid)}
Branches
- mainmain branch
Latest commits
- bce182e3tickets: Hybriel master 7eea0d32 (#126 memory, #48 lambda copies its argument); migrate.hl lambdas take &logmre
- 4137be0fantcolony#40: mission references point to the moved missionsmre
- 9bfba36aantcolony#40: history (LOG.md), worker briefs (missions/) and reports moved here from antcolony, numbered per project; old numbers in antcolony docs/mission-map.mdmre
- c7bd2645tickets: Hybriel master 73267707 (#122 fixed); compactNow workaround removed (#110 covered)mre
- 2ab91ee9tickets: gate checks rows appear once (session sync); re-vendor to ff51cf46 stopped on hybriel#122, stays 837fe120mre
- e01c2b1dtickets#24: installable app (manifest, service worker, offline list), own icon; gate waits for the hello's pongmre
- 752fbb7fdeploy.sh: back up live storage/.sessions/.env before every deploy (newest 5 kept)mre
- 38bdd5e4deploy.sh: never send .git or .gitignore to Byrodinmre
- f12fa1bcState of 2026-09-27, before the move to gitoriamre