@@ -89,6 +89,7 @@ func DefaultBuiltins(rt Runtime) Builtins {
8989 "width" : numBuiltin ("width" , rt .Width ),
9090 "color" : stringBuiltin ("color" , rt .Color ),
9191 "colour" : stringBuiltin ("colour" , rt .Color ),
92+ "clear" : {Func : clearFunc (rt .Clear ), Decl : clearDecl },
9293 }
9394 xyParams := []* parser.Var {
9495 {Name : "x" , T : parser .NUM_TYPE },
@@ -135,6 +136,7 @@ type GraphicsRuntime interface {
135136 Circle (radius float64 )
136137 Width (w float64 )
137138 Color (s string )
139+ Clear (color string )
138140}
139141
140142type UnimplementedRuntime struct {
@@ -162,6 +164,7 @@ func (rt *UnimplementedRuntime) Rect(x, y float64) { rt.Unimplemented("rect"
162164func (rt * UnimplementedRuntime ) Circle (r float64 ) { rt .Unimplemented ("circle" ) }
163165func (rt * UnimplementedRuntime ) Width (w float64 ) { rt .Unimplemented ("width" ) }
164166func (rt * UnimplementedRuntime ) Color (s string ) { rt .Unimplemented ("color" ) }
167+ func (rt * UnimplementedRuntime ) Clear (color string ) { rt .Unimplemented ("clear" ) }
165168
166169var readDecl = & parser.FuncDeclStmt {
167170 Name : "read" ,
@@ -523,6 +526,26 @@ func rand1Func(_ *scope, args []Value) (Value, error) {
523526 return & Num {Val : rand .Float64 ()}, nil //nolint: gosec
524527}
525528
529+ var clearDecl = & parser.FuncDeclStmt {
530+ Name : "clear" ,
531+ VariadicParam : & parser.Var {Name : "s" , T : parser .STRING_TYPE },
532+ ReturnType : parser .NONE_TYPE ,
533+ }
534+
535+ func clearFunc (clearFn func (string )) BuiltinFunc {
536+ return func (_ * scope , args []Value ) (Value , error ) {
537+ if len (args ) > 1 {
538+ return nil , fmt .Errorf ("%w: 'clear' takes 0 or 1 string arguments" , ErrBadArguments )
539+ }
540+ color := ""
541+ if len (args ) == 1 {
542+ color = args [0 ].(* String ).Val
543+ }
544+ clearFn (color )
545+ return nil , nil
546+ }
547+ }
548+
526549func xyDecl (name string ) * parser.FuncDeclStmt {
527550 return & parser.FuncDeclStmt {
528551 Name : name ,
0 commit comments