isbpl/std.isbpl
2022-02-05 23:11:26 +01:00

207 lines
3.2 KiB
Text

native func alen
native func aget
native func aput
native func anew
native func _array
func __array {
"NotImplemented" "Not implemented" throw
}
native func _char
native func _int
native func _file
native func _float
native func _long
native func _double
func __char {
_char
}
func __int {
_int
}
func __file {
_file
}
native func __float
func __long {
_long
}
native func __double
native func ischar
native func isint
native func isfloat
native func islong
native func isdouble
native func stop
native func include
native func putchar
native func read
native func type
native func mktype
# call a dynamically computed function
native func call
native func typename
native func throw
# try and catch are keywords, not functions
# storelength
native func stlen
native func eq
native func gt
native func lt
native func not
native func +
native func -
native func /
native func *
native func **
native func %
native func ^
native func dup
native func pop
native func swap
"char" mktype =TYPE_CHAR
"int" mktype =TYPE_INT
"file" mktype =TYPE_FILE
"float" mktype =TYPE_FLOAT
"long" mktype =TYPE_LONG
"double" mktype =TYPE_DOUBLE
"array" mktype =TYPE_ARRAY
"string" mktype =TYPE_STRING
func _string {
=object
object ischar if {
0 _char 1 anew =object
}
object isint if {
itos =object
}
object isfloat if {
ftoi =object
}
object islong if {
ltoi =object
}
object isdouble if {
dtoi =object
}
object
}
func __string {
_string
}
func isstring {
isarray
}
func itos {
ntos
}
func ltos {
ntos
}
func ftos {
ntos
}
func dtos {
ntos
}
# Number to string
func ntos {
"" =s
=n
n 0 lt dup if { n neg =n 1 =negative } =negative
n type =thetype
while n 1 lt not {
n (n 10 % dup =x) - =n
s (n '0' + _char) strconcat =s
}
1 =steps
while n 0 eq not {
n (n (1 (steps dup 10 * =steps) /) % dup =x) - =n
s (x '0' + _char) strconcat =s
}
negative if { "-" s strconcat =s }
s
}
# Copy array
func acopy {
# bind args
=len
=idx2
=idx1
=arr2
=arr1
1 neg =i
while (i 1 + =i) (i len lt) {
arr2 i idx2 + (arr1 i idx1 + aget) aput
}
}
func strconcat {
# bind args
_string =str2
_string =str1
0 _char str1 alen str2 alen anew = str
str1 str 0 0 str1 alen acopy
str2 str 0 str1 alen str2 alen acopy
str
}
func strsplit {
# bind args
_string =str
_string =splitter
1 neg =i
"" 0 anew =sequences
while (i 1 + =1) (i str alen lt) {
str i aget =chr
splitter 0 aget =spl
"" =sequence
1 neg =j
while (j 1 + =j) (chr spl eq) {
(str i j + aget dup =chr) (splitter j aget dup =spl) eq not if {
sequences =oldsq
"" (sequences alen dup =seq 1 +) anew =sequences
oldsq sequences 0 0 oldsq alen acopy
sequences seq sequence aput
}
else {
sequence chr strconcat =sequence
}
}
}
sequences
}
func puts {
_string =str
1 neg =i
while (i 1 + =i) (i str alen lt) {
str i aget putchar
}
}