From cd5b7ff3181e5a095e9eac4c157b0b340222bca0 Mon Sep 17 00:00:00 2001 From: Alan Donovan Date: Thu, 28 Aug 2014 16:56:49 -0400 Subject: [PATCH] go/ssa/interp: add intrinsic for runtime.environ, recently added. LGTM=gri R=gri CC=golang-codereviews https://golang.org/cl/135120043 --- go/ssa/interp/external.go | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/go/ssa/interp/external.go b/go/ssa/interp/external.go index a52d61ef..f96c89b4 100644 --- a/go/ssa/interp/external.go +++ b/go/ssa/interp/external.go @@ -97,6 +97,7 @@ func init() { "(*runtime.Func).Entry": ext۰runtime۰Func۰Entry, "(*runtime.Func).FileLine": ext۰runtime۰Func۰FileLine, "(*runtime.Func).Name": ext۰runtime۰Func۰Name, + "runtime.environ": ext۰runtime۰environ, "runtime.getgoroot": ext۰runtime۰getgoroot, "strings.IndexByte": ext۰strings۰IndexByte, "sync.runtime_Semacquire": ext۰sync۰runtime_Semacquire, @@ -278,6 +279,16 @@ func ext۰runtime۰FuncForPC(fr *frame, args []value) value { return &Func } +func ext۰runtime۰environ(fr *frame, args []value) value { + // We don't return syscall.envs (see Interpret()) because it's + // not a dependency of runtime so the package might not exist. + var env []value + for _, s := range os.Environ() { + env = append(env, s) + } + return env +} + func ext۰runtime۰getgoroot(fr *frame, args []value) value { return os.Getenv("GOROOT") }