add fast.spl, improving repl
This commit is contained in:
parent
a8a2616a41
commit
5c8875eb55
3 changed files with 92 additions and 1 deletions
87
spl/fast.spl
Normal file
87
spl/fast.spl
Normal file
|
@ -0,0 +1,87 @@
|
||||||
|
|
||||||
|
"#stream.spl" import
|
||||||
|
"#http.spl" import
|
||||||
|
|
||||||
|
func ls { files | "." list-files }
|
||||||
|
func ls@ { files | list-files }
|
||||||
|
func cd { | chdir }
|
||||||
|
func cat { | read-file }
|
||||||
|
|
||||||
|
func output { | with thing ;
|
||||||
|
thing gettype "array" eq
|
||||||
|
thing gettype:ends-with<^Iter> or
|
||||||
|
dup if {
|
||||||
|
thing:foreach<&println>
|
||||||
|
}
|
||||||
|
not if {
|
||||||
|
thing _str println
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func *m { | swap :ends-with }
|
||||||
|
func m* { | swap :starts-with }
|
||||||
|
func # { | swap :filter }
|
||||||
|
func ? { | swap :map }
|
||||||
|
func times { | :iter }
|
||||||
|
|
||||||
|
func \ { | pop }
|
||||||
|
|
||||||
|
func ~@ { | env:get<"HOME"> "/" concat swap concat }
|
||||||
|
func ~ { | env:get<"HOME"> }
|
||||||
|
func $ { v | env:get }
|
||||||
|
|
||||||
|
func . { | output }
|
||||||
|
func ex { | with s ; [ ^sh ^-c s ] command-wait; }
|
||||||
|
func ex% { | command-wait; }
|
||||||
|
func into { | with input file ;
|
||||||
|
input gettype any<[ / "array" eq \ / "bytearray" eq \ ]> not if { input _str:to-bytes =input }
|
||||||
|
file 1 StreamTypes:file:create
|
||||||
|
dup :write-exact;<input>
|
||||||
|
:close;
|
||||||
|
}
|
||||||
|
|
||||||
|
func tcp { stream |
|
||||||
|
StreamTypes:tcp:create
|
||||||
|
}
|
||||||
|
|
||||||
|
func curl { s | bcurl:to-str }
|
||||||
|
|
||||||
|
func bcurl { bytes | with url ;
|
||||||
|
1 if {
|
||||||
|
url:readf<"{}:{}/{}"> dup if {
|
||||||
|
=url
|
||||||
|
url:0 url:1 _int "GET" "/" url:2 concat net:http:Request:new
|
||||||
|
2 stop
|
||||||
|
} pop
|
||||||
|
url:readf<"{}:{}"> dup if {
|
||||||
|
=url
|
||||||
|
url:0 url:1 _int "GET" "/" net:http:Request:new
|
||||||
|
2 stop
|
||||||
|
} pop
|
||||||
|
url:readf<"{}/{}"> dup if {
|
||||||
|
=url
|
||||||
|
url:0 80 "GET" "/" url:1 concat net:http:Request:new
|
||||||
|
2 stop
|
||||||
|
} pop
|
||||||
|
url:readf<"{}"> dup if {
|
||||||
|
=url
|
||||||
|
url:0 80 "GET" "/" net:http:Request:new
|
||||||
|
2 stop
|
||||||
|
} pop
|
||||||
|
"invalid url" panic
|
||||||
|
} :send:body
|
||||||
|
}
|
||||||
|
|
||||||
|
construct _shell_array_ext {
|
||||||
|
idx
|
||||||
|
;
|
||||||
|
next { any | with this ;
|
||||||
|
this:idx 0 or dup ++ this:=idx this:sget
|
||||||
|
}
|
||||||
|
}
|
||||||
|
include _shell_array_ext in array
|
||||||
|
include _Iter in array
|
||||||
|
|
||||||
|
func any { bool | with o checks ;
|
||||||
|
0 checks:foreach<{ | o swap call if { pop 1 } }>
|
||||||
|
}
|
|
@ -1,7 +1,9 @@
|
||||||
|
|
||||||
|
"fast.spl" import
|
||||||
|
|
||||||
func main { mega | with args ;
|
func main { mega | with args ;
|
||||||
"Welcome to the SPL REPL!" println
|
"Welcome to the SPL REPL!" println
|
||||||
"Enter any code after the cursor to execute it.\n" println
|
"Enter any code after the cursor to execute it.\nfast.spl (for shell-like functions) is included.\n" println
|
||||||
|
|
||||||
"REPL" =program-name
|
"REPL" =program-name
|
||||||
while { 1 } {
|
while { 1 } {
|
||||||
|
|
|
@ -10,6 +10,7 @@ pub const MESSAGING: &str = include_str!("../spl/messaging.spl");
|
||||||
pub const ASSEMBLE: &str = include_str!("../spl/assemble.spl");
|
pub const ASSEMBLE: &str = include_str!("../spl/assemble.spl");
|
||||||
pub const ISBPL: &str = include_str!("../spl/isbpl.spl");
|
pub const ISBPL: &str = include_str!("../spl/isbpl.spl");
|
||||||
pub const REPL: &str = include_str!("../spl/repl.spl");
|
pub const REPL: &str = include_str!("../spl/repl.spl");
|
||||||
|
pub const FAST: &str = include_str!("../spl/fast.spl");
|
||||||
pub const PURE: &str = include_str!("../spl/pure.spl");
|
pub const PURE: &str = include_str!("../spl/pure.spl");
|
||||||
pub const TIME: &str = include_str!("../spl/time.spl");
|
pub const TIME: &str = include_str!("../spl/time.spl");
|
||||||
pub const SERVER: &str = include_str!("../spl/server.spl");
|
pub const SERVER: &str = include_str!("../spl/server.spl");
|
||||||
|
@ -30,6 +31,7 @@ pub fn register(runtime: &mut Runtime) {
|
||||||
insert("assemble.spl", ASSEMBLE);
|
insert("assemble.spl", ASSEMBLE);
|
||||||
insert("isbpl.spl", ISBPL);
|
insert("isbpl.spl", ISBPL);
|
||||||
insert("repl.spl", REPL);
|
insert("repl.spl", REPL);
|
||||||
|
insert("fast.spl", FAST);
|
||||||
insert("pure.spl", PURE);
|
insert("pure.spl", PURE);
|
||||||
insert("time.spl", TIME);
|
insert("time.spl", TIME);
|
||||||
insert("server.spl", SERVER);
|
insert("server.spl", SERVER);
|
||||||
|
|
Loading…
Add table
Reference in a new issue