Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Introduce builtin function govm and makechan #330

Open
wants to merge 20 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
0f02c83
Introduce builtin function go and makechan
Bai-Yingjie Mar 27, 2021
67ce595
Rename job to goroutineVM for better understanding
Bai-Yingjie Mar 27, 2021
d67644e
Rename builtin go to govm
Bai-Yingjie Mar 29, 2021
e4ca97e
Add docs for builtin "govm" and "makechan"
Bai-Yingjie Mar 29, 2021
ee08782
Use unexported vmObj
Bai-Yingjie Mar 29, 2021
9e5fbbc
Use needvmObj flag in BuiltinFunction
Bai-Yingjie Mar 30, 2021
cc984e8
goroutineVM: block parent VM untill all descendant VMs exit
Bai-Yingjie Apr 1, 2021
5047ab7
correct source position for closure function in call stack
Bai-Yingjie Apr 14, 2021
c4aa6ae
govm now supports calling both script functions and native functions
Bai-Yingjie Apr 14, 2021
c81780b
rename builtin govm back to go
Bai-Yingjie Apr 14, 2021
cf3fef9
Wrap main VM's error to make TestVMErrorUnwrap test pass
Bai-Yingjie Apr 15, 2021
4462ad9
update docs for builtin go
Bai-Yingjie Apr 15, 2021
a6205f4
improve panic handling
Bai-Yingjie Apr 17, 2021
496574d
Make VM's input/output redirectable
Bai-Yingjie May 3, 2021
b6d2aba
Add Args to VM so that each VM can have its own os.Args
Bai-Yingjie May 6, 2021
a14d22e
make times.sleep abortable
Bai-Yingjie May 20, 2021
367afb1
only treat ErrVMAborted in root VM as error
Bai-Yingjie May 27, 2021
b979ae1
fix times.sleep goroutine leak on abort case
Bai-Yingjie May 29, 2021
3a929e2
check aborting status before starting child VM
Bai-Yingjie May 31, 2021
4cfaeeb
Start from small stack and frame space and grow on demand
Bai-Yingjie May 31, 2021
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
164 changes: 39 additions & 125 deletions builtins.go
Original file line number Diff line number Diff line change
@@ -1,130 +1,44 @@
package tengo

var builtinFuncs = []*BuiltinFunction{
{
Name: "len",
Value: builtinLen,
},
{
Name: "copy",
Value: builtinCopy,
},
{
Name: "append",
Value: builtinAppend,
},
{
Name: "delete",
Value: builtinDelete,
},
{
Name: "splice",
Value: builtinSplice,
},
{
Name: "string",
Value: builtinString,
},
{
Name: "int",
Value: builtinInt,
},
{
Name: "bool",
Value: builtinBool,
},
{
Name: "float",
Value: builtinFloat,
},
{
Name: "char",
Value: builtinChar,
},
{
Name: "bytes",
Value: builtinBytes,
},
{
Name: "time",
Value: builtinTime,
},
{
Name: "is_int",
Value: builtinIsInt,
},
{
Name: "is_float",
Value: builtinIsFloat,
},
{
Name: "is_string",
Value: builtinIsString,
},
{
Name: "is_bool",
Value: builtinIsBool,
},
{
Name: "is_char",
Value: builtinIsChar,
},
{
Name: "is_bytes",
Value: builtinIsBytes,
},
{
Name: "is_array",
Value: builtinIsArray,
},
{
Name: "is_immutable_array",
Value: builtinIsImmutableArray,
},
{
Name: "is_map",
Value: builtinIsMap,
},
{
Name: "is_immutable_map",
Value: builtinIsImmutableMap,
},
{
Name: "is_iterable",
Value: builtinIsIterable,
},
{
Name: "is_time",
Value: builtinIsTime,
},
{
Name: "is_error",
Value: builtinIsError,
},
{
Name: "is_undefined",
Value: builtinIsUndefined,
},
{
Name: "is_function",
Value: builtinIsFunction,
},
{
Name: "is_callable",
Value: builtinIsCallable,
},
{
Name: "type_name",
Value: builtinTypeName,
},
{
Name: "format",
Value: builtinFormat,
},
{
Name: "range",
Value: builtinRange,
},
var builtinFuncs []*BuiltinFunction

// if needVMObj is true, VM will pass [VMObj, args...] to fn when calling it.
func addBuiltinFunction(name string, fn CallableFunc, needVMObj bool) {
builtinFuncs = append(builtinFuncs, &BuiltinFunction{Name: name, Value: fn, NeedVMObj: needVMObj})
}

func init() {
addBuiltinFunction("len", builtinLen, false)
addBuiltinFunction("copy", builtinCopy, false)
addBuiltinFunction("append", builtinAppend, false)
addBuiltinFunction("delete", builtinDelete, false)
addBuiltinFunction("splice", builtinSplice, false)
addBuiltinFunction("string", builtinString, false)
addBuiltinFunction("int", builtinInt, false)
addBuiltinFunction("bool", builtinBool, false)
addBuiltinFunction("float", builtinFloat, false)
addBuiltinFunction("char", builtinChar, false)
addBuiltinFunction("bytes", builtinBytes, false)
addBuiltinFunction("time", builtinTime, false)
addBuiltinFunction("is_int", builtinIsInt, false)
addBuiltinFunction("is_float", builtinIsFloat, false)
addBuiltinFunction("is_string", builtinIsString, false)
addBuiltinFunction("is_bool", builtinIsBool, false)
addBuiltinFunction("is_char", builtinIsChar, false)
addBuiltinFunction("is_bytes", builtinIsBytes, false)
addBuiltinFunction("is_array", builtinIsArray, false)
addBuiltinFunction("is_immutable_array", builtinIsImmutableArray, false)
addBuiltinFunction("is_map", builtinIsMap, false)
addBuiltinFunction("is_immutable_map", builtinIsImmutableMap, false)
addBuiltinFunction("is_iterable", builtinIsIterable, false)
addBuiltinFunction("is_time", builtinIsTime, false)
addBuiltinFunction("is_error", builtinIsError, false)
addBuiltinFunction("is_undefined", builtinIsUndefined, false)
addBuiltinFunction("is_function", builtinIsFunction, false)
addBuiltinFunction("is_callable", builtinIsCallable, false)
addBuiltinFunction("type_name", builtinTypeName, false)
addBuiltinFunction("format", builtinFormat, false)
addBuiltinFunction("range", builtinRange, false)
}

// GetAllBuiltinFunctions returns all builtin function objects.
Expand Down
1 change: 1 addition & 0 deletions bytecode.go
Original file line number Diff line number Diff line change
Expand Up @@ -295,4 +295,5 @@ func init() {
gob.Register(&Time{})
gob.Register(&Undefined{})
gob.Register(&UserFunction{})
gob.Register(&BuiltinFunction{})
}
Loading