spec: bytevectors (make-bytevector/u8-ref/u8-set!/utf8->string/etc)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-05-01 19:16:02 +00:00
parent 24e1a862fb
commit a381154507
5 changed files with 486 additions and 3 deletions

View File

@@ -1252,3 +1252,77 @@
:params ((re :as regexp) (str :as string))
:returns "list"
:doc "Split str on every match of re; returns list of strings.")
(define-module :stdlib.bytevectors)
(define-primitive
"make-bytevector"
:params (n &rest fill)
:returns "bytevector"
:doc "Create a bytevector of n bytes, all initialised to fill (default 0).")
(define-primitive
"bytevector?"
:params (v)
:returns "boolean"
:doc "True if v is a bytevector.")
(define-primitive
"bytevector-length"
:params ((bv :as bytevector))
:returns "number"
:doc "Number of bytes in bv.")
(define-primitive
"bytevector-u8-ref"
:params ((bv :as bytevector) (i :as number))
:returns "number"
:doc "Byte value 0-255 at index i.")
(define-primitive
"bytevector-u8-set!"
:params ((bv :as bytevector) (i :as number) (byte :as number))
:returns "nil"
:doc "Set byte at index i to byte 0-255. Mutates bv.")
(define-primitive
"bytevector-copy"
:params ((bv :as bytevector) &rest bounds)
:returns "bytevector"
:doc "Fresh copy of bv, optionally sliced to [start, end).")
(define-primitive
"bytevector-copy!"
:params ((dst :as bytevector) (at :as number) (src :as bytevector) &rest bounds)
:returns "nil"
:doc "Copy bytes from src[start..end) into dst starting at at. Mutates dst.")
(define-primitive
"bytevector-append"
:params (&rest bvs)
:returns "bytevector"
:doc "Concatenate bytevectors into a new bytevector.")
(define-primitive
"utf8->string"
:params ((bv :as bytevector) &rest bounds)
:returns "string"
:doc "Decode bv[start..end) as UTF-8 and return the string.")
(define-primitive
"string->utf8"
:params ((s :as string) &rest bounds)
:returns "bytevector"
:doc "Encode s[start..end) as UTF-8 and return a bytevector.")
(define-primitive
"bytevector->list"
:params ((bv :as bytevector))
:returns "list"
:doc "Convert bytevector to a list of byte integers.")
(define-primitive
"list->bytevector"
:params ((lst :as list))
:returns "bytevector"
:doc "Build a bytevector from a list of byte integers 0-255.")