@@ -26,6 +26,7 @@ import (
2626 "github.com/cockroachdb/errors"
2727 "github.com/sirupsen/logrus"
2828 "go.starlark.net/starlark"
29+ "go.starlark.net/syntax"
2930
3031 interp "github.com/tensorchord/envd/pkg/lang/frontend/starlark"
3132 "github.com/tensorchord/envd/pkg/lang/frontend/starlark/v1/config"
@@ -42,6 +43,19 @@ type entry struct {
4243 err error
4344}
4445
46+ func envdStarlarkResolveOptions () * syntax.FileOptions {
47+ return & syntax.FileOptions {
48+ // resolver
49+ Set : false ,
50+ While : false ,
51+ TopLevelControl : false ,
52+ GlobalReassign : false ,
53+ LoadBindsGlobally : false ,
54+ // compiler
55+ Recursion : true ,
56+ }
57+ }
58+
4559// generalInterpreter is the interpreter implementation for Starlark.
4660// Please refer to https://github.com/google/starlark-go
4761type generalInterpreter struct {
@@ -104,7 +118,7 @@ func (s *generalInterpreter) exec(thread *starlark.Thread, module string) (starl
104118
105119 if ! strings .HasPrefix (module , universe .GitPrefix ) {
106120 var data interface {}
107- globals , err := starlark .ExecFile ( thread , module , data , s .predeclared )
121+ globals , err := starlark .ExecFileOptions ( envdStarlarkResolveOptions (), thread , module , data , s .predeclared )
108122 e = & entry {globals , err }
109123 } else {
110124 // exec remote git repo
@@ -135,7 +149,7 @@ func (s *generalInterpreter) loadGitModule(thread *starlark.Thread, path string)
135149 if d .IsDir () || ! strings .HasSuffix (d .Name (), ".envd" ) {
136150 return nil
137151 }
138- dict , err := starlark .ExecFile ( thread , path , src , s .predeclared )
152+ dict , err := starlark .ExecFileOptions ( envdStarlarkResolveOptions (), thread , path , src , s .predeclared )
139153 if err != nil {
140154 return err
141155 }
@@ -181,7 +195,7 @@ func (s generalInterpreter) ExecFile(filename string, funcname string) (interfac
181195
182196func (s generalInterpreter ) Eval (script string ) (interface {}, error ) {
183197 thread := s .NewThread (script )
184- return starlark .ExecFile ( thread , "" , script , s .predeclared )
198+ return starlark .ExecFileOptions ( envdStarlarkResolveOptions (), thread , "" , script , s .predeclared )
185199}
186200
187201func GetEnvdProgramHash (filename string ) (string , error ) {
@@ -193,7 +207,7 @@ func GetEnvdProgramHash(filename string) (string, error) {
193207 funcAlwaysHas := func (x string ) bool {
194208 return true
195209 }
196- _ , prog , err := starlark .SourceProgram ( filename , envdSrc , funcAlwaysHas )
210+ _ , prog , err := starlark .SourceProgramOptions ( envdStarlarkResolveOptions (), filename , envdSrc , funcAlwaysHas )
197211 if err != nil {
198212 return "" , err
199213 }
0 commit comments