BBS:      TELESC.NET.BR
Assunto:  src/syncterm/CMakeLists.txt GNUmakefile Wren.adoc src/syncterm/re1/par
De:       Deuc¨
Data:     Mon, 27 Apr 2026 07:21:04 -0700
-----------------------------------------------------------
https://gitlab.synchro.net/main/sbbs/-/commit/735fc016ec74217075aef86d
Modified Files:
	src/syncterm/CMakeLists.txt GNUmakefile Wren.adoc src/syncterm/re1/parse.y pike.c regexp.h y.tab.c src/syncterm/wren_bind.c wren_host.c wren_host_internal.h
Log Message:
SyncTERM: add Hook.onMatch streaming-regex input hooks via RE1

`Hook.onMatch(pattern, fn)` registers a regex against the inbound byte
stream.  Implemented as a streaming Pike VM on top of the vendored
RE1 (BSD-3-Clause): each byte feeds one VM step returning tri-state
{MATCH, IMPOSSIBLE, PENDING}; the dispatcher trims a byte off the
front on IMPOSSIBLE, fires fn and trims through the match on MATCH,
waits on PENDING.  Filtered, unfiltered, byte-equality, and regex
input hooks all share the same per-event array, preserving
registration order across all forms.

RE1 changes are additive: new pikevm_new/free/start/step/match
symbols in pike.c reuse the existing file-local helpers; original
pikevm() stays untouched.  fatal() now consults a host-installed
hook so RE1 syntax errors longjmp back to the Wren binding instead
of exit(2)'ing SyncTERM.

Patterns whose leading construct can match without consuming a byte
(*, +, ? at the start) are rejected at registration time  without
that constraint the IMPOSSIBLE-shift trick can't trim the buffer and
matches would silently start being dropped past the 4 KB cap.

Build wires re1/{compile,pike,sub,y.tab}.c with -w to confine the
pedagogical-code warnings to RE1's TUs.  Wren.adoc grows a regex
section documenting the limited grammar (no backslash escapes, no
character classes, no anchors), the leftmost-first-completing match
semantics, and the leading-anchor constraint.

Co-Authored-By: Claude Opus 4.7 (1M context) 
n
---
  mSynchronetn  hgVertrauen n hHome of Synchronet n gh[vert/cvs/bbs].synchro.net

-----------------------------------------------------------
[Voltar]