@@ -2,9 +2,11 @@ package main
2
2
3
3
import (
4
4
"fmt"
5
+ "io"
5
6
"os"
6
7
"slices"
7
8
"strings"
9
+ "time"
8
10
)
9
11
10
12
var (
17
19
"is" : ExprFunc (stdIs ),
18
20
"list" : ExprFunc (stdList ),
19
21
"vec" : ExprFunc (stdVec ),
22
+ "vector" : ExprFunc (stdVec ),
20
23
"count" : ExprFunc (stdCount ),
21
24
"isEmpty" : ExprFunc (stdIsEmpty ),
22
25
"cmp" : ExprFunc (stdCmp ),
50
53
"hashmapKeys" : ExprFunc (stdHashmapKeys ),
51
54
"hashmapVals" : ExprFunc (stdHashmapVals ),
52
55
"apply" : ExprFunc (stdApply ),
56
+ "readLine" : ExprFunc (stdReadLine ),
57
+ "quit" : ExprFunc (stdQuit ),
58
+ "exit" : ExprFunc (stdQuit ),
59
+ "time-ms" : ExprFunc (stdTimeMs ),
53
60
}}
54
61
)
55
62
@@ -624,3 +631,34 @@ func stdApply(args []Expr) (Expr, error) {
624
631
625
632
return nil , fmt .Errorf ("not callable: %s" , str (true , args [0 ]))
626
633
}
634
+
635
+ func stdReadLine (args []Expr ) (Expr , error ) {
636
+ if err := checkArgsCount (1 , 1 , args ); err != nil {
637
+ return nil , err
638
+ }
639
+ prompt , err := checkIs [ExprStr ](args [0 ])
640
+ if err != nil {
641
+ return nil , nil
642
+ }
643
+ os .Stdout .Write ([]byte (prompt ))
644
+ input , err := readUntil (os .Stdin , '\n' , 128 )
645
+ if err == io .EOF {
646
+ return exprNil , nil
647
+ } else if err != nil {
648
+ return nil , err
649
+ }
650
+ return ExprStr (input ), nil
651
+ }
652
+
653
+ func stdQuit (args []Expr ) (Expr , error ) {
654
+ var exit_code ExprNum
655
+ if len (args ) > 0 {
656
+ exit_code , _ = args [0 ].(ExprNum )
657
+ }
658
+ os .Exit (int (exit_code ))
659
+ return exprNil , nil
660
+ }
661
+
662
+ func stdTimeMs (args []Expr ) (Expr , error ) {
663
+ return ExprNum (time .Now ().UnixMilli ()), nil
664
+ }
0 commit comments