6643
This commit is contained in:
parent
6b8a3a94b1
commit
e2b55208b2
|
@ -874,7 +874,7 @@ test-copy-array:
|
|||
c3/return
|
||||
|
||||
# Fill a region of memory with zeroes.
|
||||
zero-out: # start: (addr byte), len: int
|
||||
zero-out: # start: (addr byte), size: int
|
||||
# pseudocode:
|
||||
# curr/esi = start
|
||||
# i/ecx = 0
|
||||
|
|
18
300.txt
18
300.txt
|
@ -1,3 +1,17 @@
|
|||
Layers in the 3xx series use all the available syntax sugar for SubX programs.
|
||||
For the most part they're intended to be used by the Mu translator:
|
||||
apps/mu.subx
|
||||
They're used by the Mu translator (apps/mu.subx) and can also be called from
|
||||
Mu programs if they meet certain criteria:
|
||||
|
||||
- There's a signature for them in 400.mu
|
||||
- Inouts on the stack, outputs in registers
|
||||
- Valid Mu types everywhere (Mu's type system isn't expressive enough for
|
||||
everything SubX does in rare situations.)
|
||||
- No way to for an `addr` to escape a function. No `(... addr ... addr ...)`
|
||||
inouts, and no `(... addr ...)` outputs.
|
||||
|
||||
While functions _can_ be called, not all SubX functions meeting these criteria
|
||||
_should_ be called. In particular, avoid exporting functions that could be
|
||||
misused. A classic example is trying to add a `size-of` operator. If you're
|
||||
doing that you're likely going to rely on programmers to use it correctly. Mu
|
||||
tries to be idiot-proof. Even if SubX requires greater care, using SubX
|
||||
primitives from Mu should not.
|
||||
|
|
18
400.mu
18
400.mu
|
@ -74,10 +74,10 @@ sig error-byte ed: (addr exit-descriptor), out: (addr buffered-file), msg: (addr
|
|||
sig lookup h: (handle T) -> result/eax: (addr T)
|
||||
sig handle-equal? a: handle, b: handle -> result/eax: boolean
|
||||
sig copy-handle src: handle, dest: (addr handle)
|
||||
sig allocate-region ad: (addr allocation-descriptor), n: int, out: (addr handle allocation-descriptor)
|
||||
sig allocate-array ad: (addr allocation-descriptor), n: int, out: (addr handle)
|
||||
#sig allocate-region ad: (addr allocation-descriptor), n: int, out: (addr handle allocation-descriptor)
|
||||
#sig allocate-array ad: (addr allocation-descriptor), n: int, out: (addr handle)
|
||||
sig copy-array ad: (addr allocation-descriptor), src: (addr array), out: (addr handle)
|
||||
sig zero-out start: (addr byte), len: int
|
||||
#sig zero-out start: (addr byte), size: int
|
||||
sig new-stream ad: (addr allocation-descriptor), length: int, elemsize: int, out: (addr handle stream _)
|
||||
sig read-line-buffered f: (addr buffered-file), s: (addr stream byte)
|
||||
sig read-line f: (addr stream byte), s: (addr stream byte)
|
||||
|
@ -93,14 +93,14 @@ sig skip-chars-matching in: (addr stream byte), delimiter: byte
|
|||
sig skip-chars-matching-whitespace in: (addr stream byte)
|
||||
sig skip-chars-not-matching in: (addr stream byte), delimiter: byte
|
||||
sig skip-chars-not-matching-whitespace in: (addr stream byte)
|
||||
sig skip-chars-matching-in-slice curr: (addr byte), end: (addr byte), delimiter: byte -> curr/eax: (addr byte)
|
||||
sig skip-chars-matching-whitespace-in-slice curr: (addr byte), end: (addr byte) -> curr/eax: (addr byte)
|
||||
sig skip-chars-not-matching-in-slice curr: (addr byte), end: (addr byte), delimiter: byte -> curr/eax: (addr byte)
|
||||
sig skip-chars-not-matching-whitespace-in-slice curr: (addr byte), end: (addr byte) -> curr/eax: (addr byte)
|
||||
#sig skip-chars-matching-in-slice curr: (addr byte), end: (addr byte), delimiter: byte -> curr/eax: (addr byte)
|
||||
#sig skip-chars-matching-whitespace-in-slice curr: (addr byte), end: (addr byte) -> curr/eax: (addr byte)
|
||||
#sig skip-chars-not-matching-in-slice curr: (addr byte), end: (addr byte), delimiter: byte -> curr/eax: (addr byte)
|
||||
#sig skip-chars-not-matching-whitespace-in-slice curr: (addr byte), end: (addr byte) -> curr/eax: (addr byte)
|
||||
sig skip-string line: (addr stream byte)
|
||||
sig skip-string-in-slice curr: (addr byte), end: (addr byte) -> curr/eax: (addr byte)
|
||||
#sig skip-string-in-slice curr: (addr byte), end: (addr byte) -> curr/eax: (addr byte)
|
||||
sig skip-until-close-paren line: (addr stream byte)
|
||||
sig skip-until-close-paren-in-slice curr: (addr byte), end: (addr byte) -> curr/eax: (addr byte)
|
||||
#sig skip-until-close-paren-in-slice curr: (addr byte), end: (addr byte) -> curr/eax: (addr byte)
|
||||
sig write-stream-data f: (addr buffered-file), s: (addr stream byte)
|
||||
sig write-int32-decimal out: (addr stream byte), n: int32
|
||||
sig is-decimal-digit? c: byte -> result/eax: boolean
|
||||
|
|
Loading…
Reference in New Issue