Skip to content

Commit

Permalink
Merge pull request #32 from pratikmota/builtins-changes-7
Browse files Browse the repository at this point in the history
[Improvements] Error handling in html, gtk, gorotunes and eyr file
  • Loading branch information
refaktor authored Nov 27, 2023
2 parents 369a2f2 + 753e69d commit bc12c36
Show file tree
Hide file tree
Showing 4 changed files with 86 additions and 66 deletions.
10 changes: 8 additions & 2 deletions evaldo/builtins_eyr.go
Original file line number Diff line number Diff line change
Expand Up @@ -189,6 +189,7 @@ var Builtins_eyr = map[string]*env.Builtin{

"eyr": {
Argsn: 1,
Doc: "TODODOC.",
Fn: func(ps *env.ProgramState, arg0 env.Object, arg1 env.Object, arg2 env.Object, arg3 env.Object, arg4 env.Object) env.Object {
switch bloc := arg0.(type) {
case env.Block:
Expand All @@ -198,13 +199,15 @@ var Builtins_eyr = map[string]*env.Builtin{
Eyr_EvalBlock(ps, stack)
ps.Ser = ser
return ps.Res
default:
return MakeArgError(ps, 1, []env.Type{env.BlockType}, "eyr")
}
return nil
},
},

"eyr-loop": {
Argsn: 2,
Doc: "TODODOC.",
Fn: func(ps *env.ProgramState, arg0 env.Object, arg1 env.Object, arg2 env.Object, arg3 env.Object, arg4 env.Object) env.Object {
switch cond := arg0.(type) {
case env.Integer:
Expand All @@ -219,9 +222,12 @@ var Builtins_eyr = map[string]*env.Builtin{
}
ps.Ser = ser
return ps.Res
default:
return MakeArgError(ps, 2, []env.Type{env.BlockType}, "eyr-loop")
}
default:
return MakeArgError(ps, 1, []env.Type{env.IntegerType}, "eyr-loop")
}
return nil
},
},
}
48 changes: 26 additions & 22 deletions evaldo/builtins_goroutines.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,69 +20,72 @@ var Builtins_goroutines = map[string]*env.Builtin{
"sleep": {
Argsn: 1,
Doc: "Accepts an integer and Sleeps for given number of miliseconds.",
Fn: func(env1 *env.ProgramState, arg0 env.Object, arg1 env.Object, arg2 env.Object, arg3 env.Object, arg4 env.Object) env.Object {
Fn: func(ps *env.ProgramState, arg0 env.Object, arg1 env.Object, arg2 env.Object, arg3 env.Object, arg4 env.Object) env.Object {
switch arg := arg0.(type) {
case env.Integer:
time.Sleep(time.Duration(int(arg.Value)) * time.Millisecond)
return arg
default:
return makeError(env1, "Arg 1 should be Integer.")
return MakeArgError(ps, 1, []env.Type{env.IntegerType}, "sleep")
}
},
},

"go-with": {
Argsn: 2,
Fn: func(env1 *env.ProgramState, arg0 env.Object, arg1 env.Object, arg2 env.Object, arg3 env.Object, arg4 env.Object) env.Object {
Doc: "TODODOC.",
Fn: func(ps *env.ProgramState, arg0 env.Object, arg1 env.Object, arg2 env.Object, arg3 env.Object, arg4 env.Object) env.Object {
switch arg := arg0.(type) {
case env.Object:
switch handler := arg1.(type) {
case env.Function:
go func() {
env1.FailureFlag = false
env1.ErrorFlag = false
env1.ReturnFlag = false
ps.FailureFlag = false
ps.ErrorFlag = false
ps.ReturnFlag = false
psTemp := env.ProgramState{}
copier.Copy(&psTemp, &env1)
copier.Copy(&psTemp, &ps)
CallFunction(handler, &psTemp, arg, false, nil)
// CallFunctionArgs2(handler, &psTemp, arg, *env.NewNative(psTemp.Idx, "asd", "Go-server-context"), nil)
}()
return arg0
default:
env1.FailureFlag = true
return env.NewError("arg0 should be string")
ps.FailureFlag = true
return MakeArgError(ps, 2, []env.Type{env.FunctionType}, "go-with")
}
default:
env1.FailureFlag = true
return env.NewError("arg0 should be string")
ps.FailureFlag = true
return MakeBuiltinError(ps, "First argument should be object type.", "go-with")
}
},
},

"go": {
Argsn: 1,
Fn: func(env1 *env.ProgramState, arg0 env.Object, arg1 env.Object, arg2 env.Object, arg3 env.Object, arg4 env.Object) env.Object {
Doc: "TODODOC.",
Fn: func(ps *env.ProgramState, arg0 env.Object, arg1 env.Object, arg2 env.Object, arg3 env.Object, arg4 env.Object) env.Object {
switch handler := arg0.(type) {
case env.Function:
go func() {
env1.FailureFlag = false
env1.ErrorFlag = false
env1.ReturnFlag = false
ps.FailureFlag = false
ps.ErrorFlag = false
ps.ReturnFlag = false
psTemp := env.ProgramState{}
copier.Copy(&psTemp, &env1)
copier.Copy(&psTemp, &ps)
CallFunction(handler, &psTemp, nil, false, nil)
// CallFunctionArgs2(handler, &psTemp, arg, *env.NewNative(psTemp.Idx, "asd", "Go-server-context"), nil)
}()
return arg0
default:
env1.FailureFlag = true
return env.NewError("arg0 should be string")
ps.FailureFlag = true
return MakeArgError(ps, 1, []env.Type{env.FunctionType}, "go")
}
},
},

"new-channel": {
Argsn: 1,
Doc: "TODODOC.",
Fn: func(ps *env.ProgramState, arg0 env.Object, arg1 env.Object, arg2 env.Object, arg3 env.Object, arg4 env.Object) env.Object {
switch buflen := arg0.(type) {
case env.Integer:
Expand All @@ -91,34 +94,35 @@ var Builtins_goroutines = map[string]*env.Builtin{
return *env.NewNative(ps.Idx, ch, "Rye-channel")
default:
ps.FailureFlag = true
return env.NewError("first arg should be integer")
return MakeArgError(ps, 1, []env.Type{env.IntegerType}, "new-channel")
}

},
},
"Rye-channel//read": {
Argsn: 1,
Doc: "TODODOC.",
Fn: func(ps *env.ProgramState, arg0 env.Object, arg1 env.Object, arg2 env.Object, arg3 env.Object, arg4 env.Object) env.Object {
switch chn := arg0.(type) {
case env.Native:
msg := <-chn.Value.(chan *env.Object)
return *msg
default:
ps.FailureFlag = true
return env.NewError("arg 1 should be Uri")
return MakeArgError(ps, 1, []env.Type{env.NativeType}, "Rye-channel//read")
}
},
},
"Rye-channel//send": {
Argsn: 2,
Doc: "TODODOC.",
Fn: func(ps *env.ProgramState, arg0 env.Object, arg1 env.Object, arg2 env.Object, arg3 env.Object, arg4 env.Object) env.Object {
switch chn := arg0.(type) {
case env.Native:
chn.Value.(chan *env.Object) <- &arg1
return arg0
default:
ps.FailureFlag = true
return env.NewError("first ar0 should be native")
return MakeArgError(ps, 1, []env.Type{env.NativeType}, "Rye-channel//send")
}
},
},
Expand Down
63 changes: 35 additions & 28 deletions evaldo/builtins_gtk.go
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
//go:build b_gtk
// +build b_gtk

package evaldo
Expand All @@ -14,127 +15,133 @@ var Builtins_gtk = map[string]*env.Builtin{

"gtk-init": {
Argsn: 0,
Fn: func(env1 *env.ProgramState, arg0 env.Object, arg1 env.Object, arg2 env.Object, arg3 env.Object, arg4 env.Object) env.Object {
Doc: "TODODOC.",
Fn: func(ps *env.ProgramState, arg0 env.Object, arg1 env.Object, arg2 env.Object, arg3 env.Object, arg4 env.Object) env.Object {
gtk.Init(nil)
return env.Integer{1}
},
},
"gtk-main": {
Argsn: 0,
Fn: func(env1 *env.ProgramState, arg0 env.Object, arg1 env.Object, arg2 env.Object, arg3 env.Object, arg4 env.Object) env.Object {
Doc: "TODODOC.",
Fn: func(ps *env.ProgramState, arg0 env.Object, arg1 env.Object, arg2 env.Object, arg3 env.Object, arg4 env.Object) env.Object {
gtk.Main()
return env.Integer{1}
},
},
"gtk-new-window": {
Argsn: 0,
Fn: func(env1 *env.ProgramState, arg0 env.Object, arg1 env.Object, arg2 env.Object, arg3 env.Object, arg4 env.Object) env.Object {
Doc: "Create new gtk window.",
Fn: func(ps *env.ProgramState, arg0 env.Object, arg1 env.Object, arg2 env.Object, arg3 env.Object, arg4 env.Object) env.Object {
win, _ := gtk.WindowNew(gtk.WINDOW_TOPLEVEL)
return *env.NewNative(env1.Idx, win, "gtk-window")
return *env.NewNative(ps.Idx, win, "gtk-window")
},
},
"gtk-window//set-title": {
Argsn: 2,
Fn: func(env1 *env.ProgramState, arg0 env.Object, arg1 env.Object, arg2 env.Object, arg3 env.Object, arg4 env.Object) env.Object {
Doc: "Set title of gtk window.",
Fn: func(ps *env.ProgramState, arg0 env.Object, arg1 env.Object, arg2 env.Object, arg3 env.Object, arg4 env.Object) env.Object {
switch obj := arg0.(type) {
case env.Native:
switch val := arg1.(type) {
case env.String:
obj.Value.(*gtk.Window).SetTitle(val.Value)
return obj
default:
return env.NewError("arg 2 should be String")
return MakeArgError(ps, 2, []env.Type{env.StringType}, "gtk-window//set-title")
}
default:
return env.NewError("arg 2 should be Native")
return MakeArgError(ps, 1, []env.Type{env.NativeType}, "gtk-window//set-title")
}
return env.NewError("arg 2 should be Native")

},
},
"gtk-window//show": {
Argsn: 1,
Fn: func(env1 *env.ProgramState, arg0 env.Object, arg1 env.Object, arg2 env.Object, arg3 env.Object, arg4 env.Object) env.Object {
Doc: "Show gtk window.",
Fn: func(ps *env.ProgramState, arg0 env.Object, arg1 env.Object, arg2 env.Object, arg3 env.Object, arg4 env.Object) env.Object {
switch obj := arg0.(type) {
case env.Native:
obj.Value.(*gtk.Window).ShowAll()
return obj
default:
return env.NewError("arg 2 should be Native")
return MakeArgError(ps, 1, []env.Type{env.NativeType}, "gtk-window//show")
}
return env.NewError("arg 2 should be Native")
},
},

"gtk-new-label": {
Argsn: 0,
Fn: func(env1 *env.ProgramState, arg0 env.Object, arg1 env.Object, arg2 env.Object, arg3 env.Object, arg4 env.Object) env.Object {
Doc: "TODODOC.",
Fn: func(ps *env.ProgramState, arg0 env.Object, arg1 env.Object, arg2 env.Object, arg3 env.Object, arg4 env.Object) env.Object {
//switch str := arg0.(type) {
//case env.String:
l, _ := gtk.LabelNew("...")
return *env.NewNative(env1.Idx, l, "gtk-label")
return *env.NewNative(ps.Idx, l, "gtk-label")
//default:
// return env.NewError("arg 1 should be String")
//}
},
},
"gtk-label//set-text": {
Argsn: 2,
Fn: func(env1 *env.ProgramState, arg0 env.Object, arg1 env.Object, arg2 env.Object, arg3 env.Object, arg4 env.Object) env.Object {
Doc: "Set text on gtk label.",
Fn: func(ps *env.ProgramState, arg0 env.Object, arg1 env.Object, arg2 env.Object, arg3 env.Object, arg4 env.Object) env.Object {
switch win := arg0.(type) {
case env.Native:
switch str := arg1.(type) {
case env.String:
win.Value.(*gtk.Label).SetText(str.Value)
return win
default:
return env.NewError("arg 2 should be String")
return MakeArgError(ps, 1, []env.Type{env.StringType}, "gtk-label//set-text")
}

default:
return env.NewError("arg 1 should be Native")
return MakeArgError(ps, 1, []env.Type{env.NativeType}, "gtk-label//set-text")
}
},
},
"gtk-label//set-tooltip": {
Argsn: 2,
Fn: func(env1 *env.ProgramState, arg0 env.Object, arg1 env.Object, arg2 env.Object, arg3 env.Object, arg4 env.Object) env.Object {
Doc: "Set tool tip on gtk label.",
Fn: func(ps *env.ProgramState, arg0 env.Object, arg1 env.Object, arg2 env.Object, arg3 env.Object, arg4 env.Object) env.Object {
switch win := arg0.(type) {
case env.Native:
switch str := arg1.(type) {
case env.String:
win.Value.(*gtk.Label).SetTooltipText(str.Value)
return win
default:
return env.NewError("arg 2 should be String")
return MakeArgError(ps, 2, []env.Type{env.StringType}, "gtk-label//set-tooltip")
}

default:
return env.NewError("arg 1 should be Native")
return MakeArgError(ps, 1, []env.Type{env.NativeType}, "gtk-label//set-tooltip")
}
},
},
"gtk-window//add-to": {
Argsn: 2,
Fn: func(env1 *env.ProgramState, arg0 env.Object, arg1 env.Object, arg2 env.Object, arg3 env.Object, arg4 env.Object) env.Object {
Doc: "TODODOC.",
Fn: func(ps *env.ProgramState, arg0 env.Object, arg1 env.Object, arg2 env.Object, arg3 env.Object, arg4 env.Object) env.Object {
switch win := arg0.(type) {
case env.Native:
switch wig := arg1.(type) {
case env.Native:
win.Value.(*gtk.Window).Add(wig.Value.(gtk.IWidget))
return wig
default:
return env.NewError("arg 2 should be Native")
return MakeArgError(ps, 2, []env.Type{env.NativeType}, "gtk-window//add-to")
}

default:
return env.NewError("arg 1 should be Native")
return MakeArgError(ps, 1, []env.Type{env.NativeType}, "gtk-window//add-to")
}
},
},
"gtk-window//set-size": {
Argsn: 3,
Fn: func(env1 *env.ProgramState, arg0 env.Object, arg1 env.Object, arg2 env.Object, arg3 env.Object, arg4 env.Object) env.Object {
Doc: "Set window size in gtk gui.",
Fn: func(ps *env.ProgramState, arg0 env.Object, arg1 env.Object, arg2 env.Object, arg3 env.Object, arg4 env.Object) env.Object {
switch win := arg0.(type) {
case env.Native:
switch x := arg1.(type) {
Expand All @@ -144,13 +151,13 @@ var Builtins_gtk = map[string]*env.Builtin{
win.Value.(*gtk.Window).SetDefaultSize(int(x.Value), int(y.Value))
return win
default:
return env.NewError("arg 3 should be Int")
return MakeArgError(ps, 2, []env.Type{env.IntegerType}, "gtk-window//set-size")
}
default:
return env.NewError("arg 2 should be Int")
return MakeArgError(ps, 2, []env.Type{env.IntegerType}, "gtk-window//set-size")
}
default:
return env.NewError("arg 1 should be Native")
return MakeArgError(ps, 1, []env.Type{env.NativeType}, "gtk-window//set-size")
}
},
},
Expand Down
Loading

0 comments on commit bc12c36

Please sign in to comment.